Ssh
ssh master - 遠端執行 su
我有一個
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。有任何想法嗎 ?
傳統上,互動式密碼問題是通過使用
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"'