[root@slave1 docker]# vi remoteShellExec.sh
[root@slave1 docker]#
#!/bin/bashpasswd='root@123'
/usr/bin/expect<<EOF
set time 30
spawn ssh root@10.1.205.166 -tt unzip -o /home/docker/alarm-collection.zip -d /home/docker/
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect eof
EOF[root@slave1 docker]#
注意:如果ssh没加tt参数(表示不为这个连接分配TTY,这里非得用两个tt才不会报错),可能会报Pseudo-terminal will not be allocated because stdin is not a terminal的错
所有shh参数如下:
-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。
-n:表示只连接远程主机,不打开远程shell;
-t:表示不为这个连接分配TTY-T Disable pseudo-terminal allocation.
-t Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty. (强制伪终端分配。这可以用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时,即使ssh没有本地tty,多个-t选项也可以强制分配tty)
tty是Teletype的缩写——终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。