Bash脚本:在远程服务器内执行unix命令

时间:2015-07-08 00:16:26

标签: bash shell unix

我正在尝试从服务器A登录到服务器B,并使用shell脚本在服务器B上执行简单的UNIX命令。代码如下。但是ls -al显示服务器A的结果而不是登录到服务器B的结果。任何输入都非常受欢迎。感谢

#!/bin/bash

clear
sshpass -p password ssh hostname
ls -al
exit

2 个答案:

答案 0 :(得分:2)

当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并传递 在它的标准输入文件中提供的行。遥控器 然后shell会将这些字符串解释为命令并执行它们。

答案 1 :(得分:1)

如果您只想在远程服务器上运行ls -al,请将其与ssh命令放在同一行,如

sshpass -p password ssh hostname ls -al

它会在命令结束时自动退出,因此您不需要放exit

此外,如果你要这样做并且不想以交互方式输入密码,你可能希望看一下分享公钥/私钥并使用它,这样它就赢了曾经要求输入密码(除非你的密码保护你的私钥)