サーバーに ssh を接続し、自動的に sudo コマンドを実行し、シェルを開いたままにします。

サーバーに ssh を接続し、自動的に sudo コマンドを実行し、シェルを開いたままにします。

aliasローカルコンピュータに保存されているパスワードを使用してローカルコンピュータでターゲットシステムをssh実行したいのですが、リモートsudoシステムではシェルを開いたままにします。その理由は、私が怠惰でサーバーにログインするたびに長いパスワードを入力したくないからです。私はこれが最も安全なものではないことを知っています。

今、私は次のことがうまくいきます。

ssh -q -t $1 "echo $mypword|base64 -d|sudo -S ls; bash -l"

$1リモートシステムのホスト名。 mypwordは、ローカルシステムに保存されているエンコードされたパスワードです。これは動作し、私のシェルを開いたままにします。その後、sudoを使用してすべての操作を実行できます。これは、そのシェルのキャッシュが保存されるためです。

私が持っている問題は、私のアカウントに対してpsとgrepを実行すると、プロセスリストにパスワードを含むエンコードされた文字列が表示されることです。できません。プロセスリストにパスワードを表示せずにこれを行う方法はありますか?

私は試した:

echo $mypword|ssh -q -t $1 "base64 -d|sudo -S ls -l /root;bash -l"

音はls出たが、ケースは開いていなかった。

ベストアンサー1

通常、これはで行うことができますexpect。環境でパスワードを検索してそれを渡し、base64出力を復元することができます。その後、sshを生成し、$シェルプロンプトを待ってからsudoコマンドを送信します。 sudoのパスワードプロンプトが表示されたら、デコードされたパスワードを送信し、期待どおりに通常の方法で続行しますinteract。以下をファイルに入れて実行可能にし、ホスト名を引数として呼び出します。

#!/usr/bin/expect -f
# https://unix.stackexchange.com/a/422651/119298
log_user 0
spawn base64 -d
send $env(mypword)\n\x04
expect -nobrace -re "\n(.+)$"
close
set output $expect_out(1,string)

spawn ssh -q -t [lindex $argv 0] 
expect {$ }
send "sudo echo hi\n"
expect -nobrace -re {.sudo. password.*:}
send "$output\n"
expect "\n"
interact

おすすめ記事