Linux/bashでsshログインを自動化するには、
- 公開鍵を使う
- sshpassを使う
方法がありますが、どちらもサーバー側の対応が必要になります。
「接続先が客先(またはコミュニケーションのとれない部署)なのでサーバーはいじれない」場合は、expectを使う方法があります。
expectはbashのパスワードやyes/no入力を自動化する機能で、sshの他にkinit等の認証にも利用できます。
また、サーバーにスクリプトを保存することもできない場合は、ワンライナーのスクリプトをローカルマシンからコピペすることで対応できます。
数秒の業務効率化ですが、毎回のパスワード入力にウンザリしている人はお試しあれ。
【条件】ssh, expectがインストールされていること
【スクリプト】
expect -c 'spawn ssh userName@serverName; expect "assword:"; send "myPassword\r"; interact'
【解説】
- -c:スクリプトとして以下の分を実行する
- spawn:コマンドを実行、今回はssh
- expect:名前が紛らわしいのですが、これで入力待ち。次の分が正規表現で見つかるまでまつ。"assword:"だと、Password:とpassword:両方に対応。サーバーによってこの文字が違うかもしれないので注意
- send:キー入力、今回はパスワード
- interact:シェルに戻る
- シングルクォーテーションとエスケープ:今回は、シングルクォーテーションで全体を囲み、文字列をダブルクォーテーションで囲みましたが、ダブルクォーテーションで始めると、スクリプト中の文字列はエスケープして「\"」を使う必要あり。見辛いので前者をオススメ。
0 件のコメント:
コメントを投稿