SSHログインプロセスを自動化するためにExpectスクリプトを作成しました。私のユーザーアカウントにrsaキーが設定されていますが、ログイン後にrootに切り替えたいのですが、リモートサーバーはパスワードを入力しません。リモートサーバーにパスワードを提供するスクリプトが表示されていますが、非表示にできるかどうか疑問に思います。しかし、なぜこれが止まるのか教えてくれる人はいますか?
#!/usr/bin/expect
spawn ssh <server> su -
expect "Password"
send "MyPassword\r"
interact
まさにこの画面にあります:
Password: "password"
カーソルはすぐ下にあり、点滅し続けます。 /var/log/secureでスクリプトで作成されたログイン試行の行を、手動でルートを取得するための一般的なログイン試行と比較しました。
次のようにスクリプトを作成します。
Jun 7 15:17:50 <server> su: pam_unix(su-l:session): session opened for user root by (uid=1000)
手動で:
Jun 7 15:18:48 <server> su: pam_unix(su-l:session): session opened for user root by <user>(uid=1000)
唯一の違いは、手動ログインに私のユーザー名がリストされていることです。
コマンドを次に変更してみました。
spawn ssh <server> su - root
spawn ssh <server> sudo su
しかし、どちらも機能しません。これをどのように実行できますか?
ベストアンサー1
スクリプトでtty割り当てを強制するには、-tフラグを渡す必要があります。
spawn ssh -t <server> su -
これで期待どおりに動作します。