我试图从服务器A登录到服务器B,并使用shell脚本在Server上执行简单的UNIX命令。代码如下。但是ls -al显示的是服务器A的结果,而不是登录到服务器B的结果。任何输入都会受到高度赞赏。谢谢
#!/bin/bash
clear
sshpass -p password ssh hostname
ls -al
exit
发布于 2015-07-07 16:49:16
当shell解释一个脚本文件时,它会创建一个子进程来执行每个命令行。因此,sshpass -p password ssh hostname
之后的命令行实际上不是在ssh
会话中执行到hostname
,而是在运行bash实例的主机上执行的。
要实现您想要的结果,您可以检查ssh(1)使用行并注意有一个[command]
参数,该参数如下:
如果指定了命令,则它将在远程主机上执行,而不是在登录shell上执行。
因此,其中一种方法是sshpass -p password ssh hostname ls -la
。另一种可以提供更多灵活性的方法是:
#!/bin/bash
clear
cat | sshpass -p password ssh hostname <<EOF
ls -la
EOF
这将使ssh在远程主机中启动登录shell,并将此处文档中提供的行传递给它的stdin。然后远程shell将这些字符串解释为命令并执行它们。
发布于 2015-07-07 16:48:37
如果您只想在远程服务器上运行ls -al
,请将它放在与ssh
命令相同的行中,如
sshpass -p password ssh hostname ls -al
当它到达命令末尾时,它将自动退出,因此不需要放置exit
另外,如果您要这样做,并且不希望交互地输入密码,您可能需要查看共享公钥/私钥,这样它就不会要求密码(除非您的密码保护您的私钥)。
https://stackoverflow.com/questions/31281518
复制