用expect可以实现(需要安装,如果你的本地机器没有的话)
我之前用的脚本,你可以修改一下以适应自己的需求(比如要不要密码之类的)
copy以下脚本并保存为sshlogin.expect,然后按照usage的示例调用或创建alias。
#!/usr/bin/expect
#Usage: sshlogin.expect
# set Variables
set ipaddr [lrange $argv 0 0]
set ssh_user [lrange $argv 1 1]
set ssh_pwd [lrange $argv 2 2]
set su_user [lrange $argv 3 3]
set su_pwd [lrange $argv 4 4]
# set timeout to 60 seconds to avoid any timeout issues if the login prompt takes time to come.
set timeout 60
#
# connect to remote server with given acc
#
spawn ssh $ssh_user@$ipaddr
# provide the ssh_user's pwd
expect "*?assword:*" { send "$ssh_pwd\r" }
#
# after connected, switch to su account
#
# after recv msg like "Last login: Thu Aug 27 17:53:03 2015 from 127.0.0.1", it's time to send "su"
expect "*?ogin:*" { send "$su_user\r" }
# after recv prompt of "*assword:", we should send su_pwd and press enter
expect "*?assword:*" { send "$su_pwd\r" }
interact
【 在 sedelick (sedelick) 的大作中提到: 】
: 每次都要ssh到一台机器然后手动su到另外一个用户并输入密码。
: 例如ssh myself@192.168.1.201 然后su oracle并输入口令
: 能否alias一个命令,ssh到另一台机器之后,自动切换并输入密码? 我知道ssh可以远程登录并执行一个命令,但是执行完命令以后立刻就退出了,这不是我的需求。
: ...................