
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"
期待どおりに機能しますが、2行目にパスワードを入力する必要があります。
次のように修正しようとしています。
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が必要です。どんなアイデアがありますか?
答え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"'