我正在尝试从服务器A登录到服务器B,并使用shell脚本在服务器B上执行简单的UNIX命令。代码如下。但是ls -al显示服务器A的结果而不是登录到服务器B的结果。任何输入都非常受欢迎。感谢
#!/bin/bash
clear
sshpass -p password ssh hostname
ls -al
exit
答案 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
此外,如果你要这样做并且不想以交互方式输入密码,你可能希望看一下分享公钥/私钥并使用它,这样它就赢了曾经要求输入密码(除非你的密码保护你的私钥)