/*Google AdSense自動広告*/

2020年5月17日日曜日

SSH login without inputting password : expect oneliner ワンライナーでexpectを使ってsshログインする

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 件のコメント:

コメントを投稿