S
我有一个需要连接的服务器。
我以S
用户身份连接到asdf
控制主机,然后执行一些操作:
ssh -N -f -M -o ControlPath=$SSHSOCKET ${USER}@${IP} -p ${PORT} -i id_rsa
ssh -to ControlPath=$SSHSOCKET ${USER}@${IP} -p ${PORT} "su -c whoami && hostname && exit"
它按预期工作,但第二行要求我输入密码。
我正在尝试这样的修复:
echo 'qwerty' | ssh -t -to ControlPath=$SSHSOCKET ${K3_USER}@${IP} -p ${PORT} "su -c whoami && hostname && exit"
但情况变得更糟:
muxserver_accept_control: tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
Password:
对我来说,首先必须使用 ssh asdf
。我也无法建立任何其他 ssh 控制主连接。我也无法修改目标计算机上的任何配置。
我只需要以某种方式通过 ssh 切换到 root。有任何想法吗 ?
答案1
传统上,交互式密码问题是通过使用expect
创建中间伪 tty 来与进程对话的命令来解决的。这是使用等效 python-pexpect 包的替代 python 版本。创建一个python文件run.py:
import sys,pexpect
(pw,cmd) = sys.argv[1:]
child = pexpect.spawn(cmd)
child.expect(r'(?i)Password:')
child.sendline(pw)
print child.read()
并使用密码和命令作为参数运行它:
python run.py 'qwerty' 'ssh -t -o ControlPath=$SSHSOCKET ${K3_USER}@${IP} -p ${PORT} "su -c whoami && hostname"'