Ssh

ssh master - 遠端執行 su

  • August 24, 2015

我有一個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"'

引用自:https://unix.stackexchange.com/questions/225111