SSH経由でログインしてコマンドを実行しますが、bashを終了したくありません。

SSH経由でログインしてコマンドを実行しますが、bashを終了したくありません。

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...シェルが終了した後にのみ実行されます。

また、~/.bashrcPS1をオーバーライドして環境に渡すこともできますが、これは役に立ちません。

あなたは試すことができます:

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定義したものと残りの部分のように作業する実際のスクリプトがいくつかあります。しかし、これは非常に面倒な間接的な方法なので、リモート設定ファイルで必要に応じて処理するのが最善です。

関連情報