それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

SSHのパスワード認証をシェル経由で手軽に行えるコマンド

ssh のパスワード認証を使いたい。

ssh で鍵登録は場合によって面倒くさい。

パスワードは弱いってのはわかる。でもシェルを実行するユーザごとに鍵をつかったり鍵管理は煩雑になる。

sshpass コマンド

ssh の認証をパスワードで、シェルコマンドでおこなえるコマンドが作られていた。それがsshpass

apt install sshpass

使い方

使い方も超簡単です。基本的な使い方は次の通り。

sshpass -p 'MySecretPassword' ssh username@example.com

シェルコマンドの実行に便利

SSH経由でリモートサーバーにログインをしてコマンドを実行したいときにパスワード認証でぱぱっと作ることが出来る。

私はこれをつかって raspi を一斉に更新したり、raspiに動画再生させたりしてる。手軽で便利すぎ

#!/usr/bin/env bash 

function get_pass(){
  ## ここで何かパスワード取り出し処理
}

MY_PASSWORD=$( get_pass )

sshpass -p MY_PASSWORD  ssh username@example.com /usr/local/sbin/remote_command

利用上の注意点

SSHdにパスワードログインを許可するのは基本的に危険。

SSHのパスワード認証は総当りで絶対突破されると思ったほうが良い。

そのためパスワード認証を有効にするときは /etc/ssh/sshd_config でサーバーへのパスワードをローカルIPに限定するなどの処理を書いておくほうが無難。ルーターがミライに乗っ取られたときはアウトだけど・・・

PasswordAuthentication no
## 指定アドレスからのSSHログインのみに限定する
match address 192.168.0.*
  PasswordAuthentication yes
## 指定ユーザにだけSSHパスワードログインを許可する
### ユーザ名にも総当りされないようにランダムキーを含めたほうが無難
match user my-own-admin-5ooOuA8bXKesVqCQ
  PasswordAuthentication yes

他にもポートを変えるとか

# What ports, IPs and protocols we listen for
Port 2223
Port 2222

他にも iptables recent を有効にするとか、Listenアドレスからv6を外すとか、あれこれ対策をした上でパスワードを使ったほうが良いと思います。

関連資料

参考資料

https://unix.stackexchange.com/questions/38737/ssh-login-with-clear-text-password-as-a-parameter

関連アイテム

OpenSSH[実践]入門 Software Design plus

OpenSSH[実践]入門 Software Design plus