- 1 sshpassコマンドとは?
- 2 検証環境
- 3 インストール方法
- 4 オプション一覧
- 5 事前準備
- 6 パスワードをパラメータに指定する方法(初回)
- 7 パスワードをパラメータに指定する方法(2回目以降)
- 8 ファイルを使う方法(-f)
- 9 環境変数を使う方法(SSHPASS)
- 10 scpコマンドへの応用
- Z 参考情報
1 sshpassコマンドとは?
sshコマンドのパスワードを手動ではなく、あらかじめ決めた方法で入力するコマンドです。
2 検証環境
2.1 ネットワーク構成
サーバとクライアントの2台構成です。図中のens33はNICの名前です。
192.168.2.0/24 client(ens33) ------------------------------------------(ens33) server .105 .100
3 インストール方法
クライアントからサーバにsshログインするので、クライアントにsshpassパッケージをインストールします。
[root@client ~]# yum -y install sshpass
sshpassの版数を確認します。
[root@client ~]# sshpass -V sshpass 1.06 (C) 2006-2011 Lingnu Open Source Consulting Ltd. (C) 2015-2016 Shachar Shemesh This program is free software, and can be distributed under the terms of the GPL See the COPYING file for more information. Using "assword" as the default password prompt indicator.
4 オプション一覧
オプションは以下のとおりです。
[root@client ~]# sshpass -h Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters -f filename Take password to use from file -d number Use number as file descriptor for getting password -p password Provide password as argument (security unwise) -e Password is passed as env-var "SSHPASS" With no parameters - password will be taken from stdin -P prompt Which string should sshpass search for to detect a password prompt -v Be verbose about what you're doing -h Show help (this screen) -V Print version information At most one of -f, -d, -p or -e should be used
5 事前準備
クライアントからサーバにuser1でログインするため、サーバでテスト用のユーザを作成します。
[root@server ~]# useradd user1
作成したユーザを確認します。
[root@server ~]# id user1 uid=1000(user1) gid=1000(user1) groups=1000(user1)
パスワードは11111を設定します。
[root@server ~]# passwd user1 ユーザー user1 のパスワードを変更。 新しいパスワード: よくないパスワード: このパスワードは回文です。 新しいパスワードを再入力してください: passwd: すべての認証トークンが正しく更新できました。
6 パスワードをパラメータに指定する方法(初回)
クライアントからサーバに初めてログインするとき、フィンガープリントが表示されます。フィンガープリントとは、サーバの公開鍵をハッシュ関数でハッシュした値です。クライアントは、この値を確認することで、今まで接続したことのあるサーバと同じサーバかどうかを判断します。つまり、サーバのなりすましを防ぐため、フィンガープリントを確認することになります。
以下はそれぞれ、サーバのECDSA公開鍵をSHA256でハッシュしたフィンガープリント、MD5でハッシュしたフィンガープリントです。
[root@client ~]# ssh 192.168.2.100 The authenticity of host '192.168.2.100 (192.168.2.100)' can't be established. ECDSA key fingerprint is SHA256:MO3c6GLWVMNHoSuUrJ6ub+FwwrinAHrR4rVo0x7tUYE. ECDSA key fingerprint is MD5:58:ab:e2:e5:97:22:ec:e5:bc:1d:b1:a1:e3:d3:0c:77. Are you sure you want to continue connecting (yes/no)?
known_hostsファイルを確認します。192.168.2.100のフィンガープリントが格納されていないので、クライアントはまだサーバにsshログインしていないことになります。
[root@client ~]# cat .ssh/known_hosts [root@client ~]#
はじめてサーバにsshログインする場合、sshのオプションに"StrictHostKeyChecking=no"を指定して、フィンガープリントが期待したものかどうかの手動確認する処理をスキップしてみます。
[root@client ~]# sshpass -p 11111 ssh -o StrictHostKeyChecking=no -l user1 192.168.2.100 Warning: Permanently added '192.168.2.100' (ECDSA) to the list of known hosts. Last login: Wed Mar 2 19:46:59 2022 from 192.168.2.105 [user1@server ~]$
サーバにsshログインすると、サーバのフィンガープリントがknown_hostsに保存されます。
[root@client ~]# cat .ssh/known_hosts 192.168.2.100 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBdl9A10lduRRoWxudEWamirUaqKArhQ3ZbROP1EJ4l/RWZEPtYqw8WU1NfYCDJQwYuA4yUM/Xj9G6tGk29UB8s=
7 パスワードをパラメータに指定する方法(2回目以降)
2回目以降は、サーバのフィンガープリントがknown_hostsに保存されているので、sshのStrictHostKeyCheckingオプションを使う必要はありません。sshpassコマンドの-pオプションでパスワードを指定して、クライアントからサーバにsshログインします。
[root@client ~]# sshpass -p 11111 ssh -l user1 192.168.2.100 Last login: Wed Mar 2 19:10:39 2022 from 192.168.2.105 [user1@server ~]$
8 ファイルを使う方法(-f)
パスワードを格納したファイルを作成します。
[root@client ~]# vi passwd.txt [root@client ~]# cat passwd.txt 11111
クライアントからサーバにsshログインします。
[root@client ~]# sshpass -f passwd.txt ssh -l user1 192.168.2.100 Last login: Wed Mar 2 19:11:11 2022 from 192.168.2.105 [user1@server ~]$
9 環境変数を使う方法(SSHPASS)
環境変数にパスワードを設定します。
[root@client ~]# export SSHPASS=11111
設定した環境変数を確認します。
[root@client ~]# echo $SSHPASS 11111
クライアントからサーバにsshログインします。
[root@client ~]# sshpass -e ssh -l user1 192.168.2.100 Last login: Wed Mar 2 19:16:42 2022 from 192.168.2.105 [user1@server ~]$
10 scpコマンドへの応用
クライアントからサーバにscpコマンドでファイル転送をしてみます。このとき、scpへの手動のパスワード入力処理をスキップしてみます。
[root@client ~]# echo 11111 > hoge.txt [root@client ~]# cat hoge.txt 11111
sshpassコマンドを使って、クライアントからサーバにファイルを転送します。
[root@client ~]# sshpass -p 11111 scp hoge.txt user1@192.168.2.100:/home/user1
クライアントからサーバに転送したファイルの中身を確認します。
[user1@server ~]$ cat hoge.txt 11111
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ