我正在尝试在脚本中创建ssh连接并在远程服务器上执行一些操作。
但是终端提示我输入密码,然后在终端窗口而不是脚本中打开连接。命令直到我退出连接才被执行。
如何在bash脚本中使用ssh连接?
如果你希望密码提示框消失,那么使用基于密钥的身份验证(在这里描述)。
要通过ssh远程运行命令,你必须将它们作为ssh的参数,像下面这样:
root@host:~ # ssh root@www 'ps -ef | grep apache | grep -v grep | wc -l'
cd /var/www; cp foo bar;
- halfdan如果您想继续使用密码而不是使用密钥交换,那么可以使用 "expect" 来实现:
#!/usr/bin/expect -f
spawn ssh user@hostname
expect "password:"
sleep 1
send "<your password>\r"
command1
command2
commandN
还有一种使用共享连接的方法,即:某人使用密码发起连接,每个随后的连接都将在同一通道上进行复用,从而避免重新认证的需要。(并且速度更快)
# ~/.ssh/config
ControlMaster auto
ControlPath ~/.ssh/pool/%r@%h
然后您只需登录,只要您已登录,Bash脚本就可以打开SSH连接。
当有人尚未打开通道时,您可以通过以下方式停止脚本的工作:
ssh ... -o KbdInteractiveAuthentication=no ....
ssh -p "$remote_port" "$remote_user@$remote_host" "$remote_command"