SSH経由で別のCentOSに接続するときにPS1を変更したいと思います。
strshell = 'PS1="remote!"'
os.system("ssh -i %s -l%s -p%s %s %s"%(SSH_KEY,SSH_USER,SSH_PORT,des,strshell))
SSHは自動的に終了します。私はこの殻の中にとどまりたいです。達成する方法。
私は別の方法で置き換えました。
tin = ' sudo -i ; export PS1="Remote! \W :"; exec /bin/bash -i'
os.system("ssh -i%s -l%s -p%s %s -t%s" % (SSH_KEY, SSH_USER, SSH_PORT, des, tin))
ところで、リモートコンピュータプロンプトの代わりにローカルコンピュータプロンプトを変更しました。なぜ?
os.systemはPython関数です
答え1
sudo -i
ターゲットユーザーとしてログインシェルを実行します。残りはexport PS1...
シェルが終了した後にのみ実行されます。
また、~/.bashrc
PS1をオーバーライドして環境に渡すこともできますが、これは役に立ちません。
あなたは試すことができます:
ssh -t host 'sudo env PROMPT_COMMAND="PS1=\"Remote! \W: \"
unset PROMPT_COMMAND" bash -l'
(対象ユーザーが~/.bashrc
これを設定していないと仮定$PROMPT_COMMAND
)。
答え2
これはうまくいくようです:
ssh -t localhost "echo '. /dev/fd/2'|sudo bash -sil 2<<\FILE
PS1='my prompt : '
exec 2>/dev/tty
exec </dev/tty
FILE
"
[sudo] password for mikeserv:
my prompt : id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),19(log)
my prompt :
sudo
デフォルトでは、0,1,2を除くすべてのファイル記述子は閉じられ、端末に<&0
パスワードが必要ですが、通常はハイジャックを介してこっそり通過できますstderr
。とにかく永遠に消えたわけではありません。実際、私が上記で最初にしたことは、ssh
端末に再接続することでした。より現実的には、$(cat file)
私が$PS1
定義したものと残りの部分のように作業する実際のスクリプトがいくつかあります。しかし、これは非常に面倒な間接的な方法なので、リモート設定ファイルで必要に応じて処理するのが最善です。