●ホストキ−の作成
作成されていない場合は、作成します。
rsa1(protocol1)用のホストキ−を作成する場合
rsa(protocol2)用のホストキ−の作成
dsa(protocol2)用のホストキ−の作成
●config(sshd_config)ファイルの設定
protocol1のRSA1、protocol2のDSAまたはRSA鍵を使用して、クライアントから接続することを前提に記載します。
なお、最終的な変更箇所は下記のとおりとなっています。
鍵を使用してクライアントからの接続が可能になるまで、「PermitRootLogin」及び「PasswordAuthentication」は「yes」にしておく方がいいです。
●rsa1(protocol1)キ−の作成
protocol1用のRSAキ−を作成します。
例えば、configファイルで「RSAAuthentication no」と設定されている場合、「ssh_userauth1: server supports no auth methods」というエラ−が表示されます。
●rsa(protocol2)キ−の作成
protocol2用のRSAキ−を作成します。上記、protocol1用のRSAキ−と共存させることは出来ません。
●dsa(protocol2)キ−の作成
※注意
「●「userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]」のためログイン出来ない」に記載しているとおりOpenSSHのバージョンによりDSA鍵を利用出来なくなっていますので注意してください。
protocol2用のDSAキ−を作成します。上記、protocol1用のRSAキ−またはprotocol2用のRSAキ−と共存させるが出来ます。
●ed25519キ−の作成
※注意
「●「userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]」のためログイン出来ない」に記載しているとおりOpenSSHのバージョンによりDSA鍵を利用出来なくなっていますので注意してください。
protocol2用のDSAキ−を作成します。上記、protocol1用のRSAキ−またはprotocol2用のRSAキ−と共存させるが出来ます。
●パスフレーズなしでログインする方法
下記の手順で、パスフレーズなしのDSA鍵を作成します。
リモート側にパスフレーズなしでログインするには、「authorized_keys」をリモート側に置きます。
リモート側からローカル側にパスフレーズなしてログインさせるには、ローカル側に「authorized_keys」を置き、リモート側に「id_dsa」を置きます。
●デフォルトではない秘密鍵の作成
通常、秘密鍵作成は意識しなければid_rsaやid_dsaがデフォルトで作成されます。同じユーザで複数のサーバに各サーバ用の秘密鍵を使用してログインする場合秘密鍵のファイル名がバッティングしてしまいます。これに対応する方法を記載します。
まず、秘密鍵を作成するサーバに該当ユーザでログインします。次に、秘密鍵を作成します。
~/.sshディレクトリがある場合
~/.sshディレクトリが無い場合
以下のようにして、作業してください。
サーバにコピーした鍵は削除します。
●パスフレーズの変更
よそからSSHの鍵を受け取った場合、パスフレーズが複雑とか気に入らないとかと理由で変更したいと思ったことはないでしょうか。SSHの公開鍵認証は通常、認証前にパスフレーズを入力しますが、SSH公開鍵認証は所持している鍵を元々設定されているパスフレーズで復号化→復号化された鍵をサーバに送信して認証という手順なので、パスフレーズというのはローカルだけで簡単に変更することができます。
変更する書式は下記のとおりです。
下記の方法でも変更出来ます。
●Authentication refused: bad ownership or modes for directory /home/user
/home/userのアクセス権を「700」や「755」等に設定するといいです。
●sftpの転送ログを記録する方法
/etc/ssh/sshd_configを以下のように変更します。
下記のようなログが記録されます。
●Agent admitted failure to sign using the key.と表示される
各サーバで同じ鍵で認証できるように設定していたところ下記のようなエラーが表示されました。
●「userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]」のためログイン出来ない
参考URL:SSH鍵の暗号化方式を強化してみた。
Fedora 22をFedora 23にアップグレードしたところこれまで使用していた秘密鍵(DSA鍵)でログイン出来なくなりました。/var/log/secureに下記のようなログが記録されていました。
どうもDSA鍵が使用出来なくなったみたいです。
やむを得ないのでRSA鍵で再作成することにします。
●rsa(protocol2)キ−の作成
●「Could not load host key: /etc/ssh/ssh_host_dsa_key」がログに記録される
Fedoraをバージョンアップしたころからか、/var/log/messagesに「Could not load host key: /etc/ssh/ssh_host_dsa_key」が記録されるようになりました。
該当ファイルは存在し、所有者やアクセス権等を変更してみましたが状況は変わりませんでした。
やむを得ないのでキーを再作成することにしました。
●SSH接続のタイムアウトを防ぐには
参考URL:SSH接続がタイムアウトで自動的に切断されないようにする
SSHは接続を持続するように設計されています。
しかし、SSHでクライアントからサーバに接続している経路上に存在するルータやファイヤーウォールによって一定時間通信のないコネクションを切断してしまう、ということによりSSHの自動切断という現象が発生します。
つまり、SSHの自動切断の原因はルータやファイヤーウォールが主です。
一定時間通信のないコネクションを切断するという行為は当然の動作です。
SSHの自動切断を防止するためには、一定期間毎に通信を行えば自動切断を回避できます。
SSHサーバ側での対策
SSHには「ClientAliveInterval」と「ClientAliveCountMax 」という設定値があります。
設定された秒数ごとに応答確認を行い、応答が無い場合、自動的にタイムアウトします。
この機能をSSHの自動切断回避に利用します。
それぞれの機能の詳細です。
「ClientAliveInterval」:ここで指定した秒数ごとに応答確認を行う。
「ClientAliveCountMax」:応答確認を行う回数。
デフォルト値は下記の通りです。
「ClientAliveInterval」のデフォルト値:0(※0だと何もしない)
「ClientAliveCountMax」のデフォルト値:3
つまり、何も設定していない場合は応答確認を行わず、その結果SSHの接続が切れてしまいますので、下記の設定をSSHの設定ファイルに追加します。
今後は120秒ごとに応答確認の通信を行います。
クライアント側からSSHを切断しない限りタイムアウトにはならずに接続は維持されます。
もし、何かしらの原因によりネットワークが切断されてしまった場合などでも、3回繰り返して応答が無ければ自動切断してくれるのでSSHの「ゴーストユーザー」が残る事もなく安心です。
SSHクライアント側での対策
SSH接続で利用するターミナルソフトの簡単な設定でSSHの自動切断を回避することができます。
PuTTYでの設定方法
メニューの「接続」をクリックします。
「セッションをアクティブに保つための null パケットの送信」の「Keepalive の間隔(秒、0 でオフ)」の値をデフォルトの「0」から任意の値(120など)に変更後、「Open」をクリックして接続します。
Tera Termでの設定方法
メニューの「設定」→「SSH」を開きます。
ハートビート(keep-alive)の秒数を設定して「OK」をクリックします。(デフォルト値:60)
メニューの「設定」→「設定の保存」をで設定した内容を保存します。
Linux Clientでの設定
/etc/ssh/ssh_configまたは~/.ssh/configに下記を追記します。
例えば ServerAliveInterval 15 に設定すると15秒毎にサーバにメッセージを送り、ServerAliveCountMaxのデフォルト回数である3回まで繰り返します。
つまり、サーバが応答しなくなった後45秒後に接続を切断します。
●SSH接続するとno matching cipher found.と表示される
古いルータにssh接続すると「no matching cipher found.」と表示され接続できません。
下記のように対処すると接続できるようになりました。
作成されていない場合は、作成します。
rsa1(protocol1)用のホストキ−を作成する場合
# ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key Generating public/private rsa1 key pair. Enter passphrase (empty for no passphrase): ← パスワ−ドの入力 Enter same passphrase again: ← 再確認用パスワ−ドの入力 Your identification has been saved in /etc/ssh/ssh_host_key. Your public key has been saved in /etc/ssh/ssh_host_key.pub. The key fingerprint is: cb:8d:37:54:fb:59:f8:52:85:e6:98:34:bf:a8:0b:c0 root@fc10.fedora.jp The key's randomart image is: +--[RSA1 2048]----+ | | | . | | + o .| | . o O ..| | E S . + + o| | o = o * | | = + . = .| | o o . | | o. | +-----------------+作成されたか確認します。
# ls -l /etc/ssh/ssh_host_key* -rw------- 1 root root 991 2008-12-09 17:27 /etc/ssh/ssh_host_key -rw-r--r-- 1 root root 655 2008-12-09 17:27 /etc/ssh/ssh_host_key.pub上記のように、ssh_host_keyとssh_host_key.pubが作成されていれば問題ありません。
rsa(protocol2)用のホストキ−の作成
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): ← パスワ−ドの入力 Enter same passphrase again: ← 再確認用パスワ−ドの入力 Your identification has been saved in /etc/ssh/ssh_host_rsa_key. Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub. The key fingerprint is: 38:4d:79:c2:2e:de:12:c7:95:43:02:9b:89:23:43:15 root@fc10.fedora.jp The key's randomart image is: +--[ RSA 2048]----+ | ..E.... . | | . . = + . | | o o + = = | | o . * + . | | = S | | . * | | o . | | . | | | +-----------------+作成されたか確認します。
[root@fc9 ~]# ls -l /etc/ssh/ssh_host_rsa_key* -rw------- 1 root root 1675 2008-12-09 17:43 /etc/ssh/ssh_host_rsa_key -rw-r--r-- 1 root root 410 2008-12-09 17:43 /etc/ssh/ssh_host_rsa_key.pub上記のように、ssh_host_rsa_keyとssh_host_rsa_key.pubが作成されていれば問題ありません。
dsa(protocol2)用のホストキ−の作成
# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key Generating public/private dsa key pair. Enter passphrase (empty for no passphrase): ← パスワ−ドの入力 Enter same passphrase again: ← 再確認用パスワ−ドの入力 Your identification has been saved in /etc/ssh/ssh_host_dsa_key. Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub. The key fingerprint is: 24:70:1f:fe:bf:af:d3:df:eb:36:d7:37:9c:7d:66:f3 root@fc10.fedora.jp The key's randomart image is: +--[ DSA 1024]----+ | . . . | | o o . | | . + | | o . | | S . | | . | | ... +| | ...BX| | o++*E| +-----------------+作成されたか確認します。
# ls -l /etc/ssh/ssh_host_dsa_key* -rw------- 1 root root 668 2008-12-09 17:43 /etc/ssh/ssh_host_dsa_key -rw-r--r-- 1 root root 618 2008-12-09 17:43 /etc/ssh/ssh_host_dsa_key.pub上記のように、ssh_host_dsa_keyとssh_host_dsa_key.pubが作成されていれば問題ありません。
●config(sshd_config)ファイルの設定
protocol1のRSA1、protocol2のDSAまたはRSA鍵を使用して、クライアントから接続することを前提に記載します。
なお、最終的な変更箇所は下記のとおりとなっています。
鍵を使用してクライアントからの接続が可能になるまで、「PermitRootLogin」及び「PasswordAuthentication」は「yes」にしておく方がいいです。
# vi /etc/ssh/sshd_config Port 22 Protocol 2,1 HostKey /etc/ssh/ssh_host_key HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key SyslogFacility AUTHPRIV PermitRootLogin no RSAAuthentication yes PasswordAuthentication no上記設定でクライアント側から問題なく接続できるようになったら、sshサ−ビスを再起動して設定を反映させます。 当然ながら、22番ポ−トを開けるのを忘れないでください。
# service sshd restart # chkconfig sshd on ← sshd自動起動設定 # chkconfig --level sshd ← sshd自動起動設定確認 sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ↑ ランレベル2〜5のonを確認
●rsa1(protocol1)キ−の作成
protocol1用のRSAキ−を作成します。
$ ssh-keygen -t rsa1 Generating public/private rsa1 key pair. Enter file in which to save the key (/home/test/.ssh/identity): デフォルトのまま良いのであれば、そのまま[Enter]を押下−−↑ Enter passphrase (empty for no passphrase):(パスワ−ド入力) Enter same passphrase again:(再度、パスワ−ド入力) Your identification has been saved in /home/test/.ssh/identity. Your public key has been saved in /home/test/.ssh/identity.pub. The key fingerprint is: 17:d4:d1:54:9e:b0:13:5d:ca:7d:b8:2f:c3:d2:0d:ad test@fc10.jp The key's randomart image is: +--[RSA1 2048]----+ | ...*o.+| | . ..=*.| | . o+.+| | . .o.| | S . o .| | . o = | | . E o| | . o | | | +-----------------+identity(秘密鍵)とidentity.pub(公開鍵)の2つのファイルが作成されているかどうかを確認します。
$ ls -l .ssh/identity* -rw------- 1 test test 992 2008-12-10 14:51 .ssh/identity -rw-r--r-- 1 test test 656 2008-12-10 14:51 .ssh/identity.pubidentity.pubをauthorized_keysという名前に変更して、パ−ミッションも変えます。
$ cp /home/test/.ssh/identity.pub /home/test/.ssh/authorized_keys $ ls -l /home/test/.ssh/authorized_keys -rw-r--r-- 1 test test 656 2008-12-10 14:55 /home/test/.ssh/authorized_keys $ chmod 600 /home/test/.ssh/authorized_keys $ ls -l /home/test/.ssh/authorized_keys -rw------- 1 test test 656 2008-12-10 14:55 /home/test/.ssh/authorized_keysprotocol1のRSA鍵を利用して、SSHでログインできるか確認します。
$ ssh -1 localhost SSHでそのサ−バに始めてログインする場合、下記のように表示されます。 The authenticity of host 'localhost (127.0.0.1)' can't be established. RSA1 key fingerprint is cb:8d:37:54:fb:59:f8:52:85:e6:98:34:bf:a8:0b:c0. Are you sure you want to continue connecting (yes/no)?「yes」と入力 Warning: Permanently added 'localhost' (RSA1) to the list of known hosts. Enter passphrase for RSA key '/home/test/.ssh/identity':(パスワ−ド入力)ログインできれば、プロンプトが返ってきます。ログインできない場合は、authorized_keysをidentityから作成してないか、とか、configファイルの設定が間違っていないか確認してください。
例えば、configファイルで「RSAAuthentication no」と設定されている場合、「ssh_userauth1: server supports no auth methods」というエラ−が表示されます。
●rsa(protocol2)キ−の作成
protocol2用のRSAキ−を作成します。上記、protocol1用のRSAキ−と共存させることは出来ません。
$ ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/home/test/.ssh/id_rsa): デフォルトのまま良いのであれば、そのまま[Enter]を押下−−↑ Enter passphrase (empty for no passphrase):(パスワ−ド入力) Enter same passphrase again:(再度、パスワ−ド入力) Your identification has been saved in /home/test/.ssh/id_rsa. Your public key has been saved in /home/test/.ssh/id_rsa.pub. The key fingerprint is: ce:6a:b7:9c:52:c6:4b:9a:67:54:1b:a3:77:51:1f:6d test@www.bigbang.mydns.jp The key's randomart image is: +--[ RSA 4096]----+ | .| | ..E| | . o.| | + . .| | .So + . | | oB o . | | Boo . | | =o=. | | ..=+. | +-----------------+id_rsa(秘密鍵)とid_rsa.pub(公開鍵)の2つのファイルが作成されているかどうかを確認します。
$ ls -l .ssh/id_rsa* -rw------- 1 test test 1743 2008-12-10 15:14 .ssh/id_rsa -rw-r--r-- 1 test test 411 2008-12-10 15:14 .ssh/id_rsa.pubid_rsa.pubをauthorized_keysという名前に変更して、パ−ミッションも変えます。
$ cp /home/test/.ssh/id_rsa.pub /home/test/.ssh/authorized_keys $ chmod 600 /home/test/.ssh/authorized_keys $ ls -l /home/test/.ssh/authorized_keys -rw------- 1 test test 411 2008-12-10 15:25 /home/test/.ssh/authorized_keysprotocol2のRSA鍵を利用して、SSHでログインできるか確認します。
$ ssh -2 localhost SSHでそのサ−バに始めてログインする場合、下記のように表示されます。 The authenticity of host 'localhost (127.0.0.1)' can't be established. RSA key fingerprint is 38:4d:79:c2:2e:de:12:c7:95:43:02:9b:89:23:43:15. Are you sure you want to continue connecting (yes/no)?「yes」と入力 Warning: Permanently added 'localhost' (RSA) to the list of known hosts. Enter passphrase for key '/home/test/.ssh/id_rsa':(パスワ−ド入力)ログインできれば、プロンプトが返ってきます。ログインできない場合は、authorized_keysをid_rsaから作成してないか、とか、configファイルの設定が間違っていないか確認してください。
●dsa(protocol2)キ−の作成
※注意
「●「userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]」のためログイン出来ない」に記載しているとおりOpenSSHのバージョンによりDSA鍵を利用出来なくなっていますので注意してください。
protocol2用のDSAキ−を作成します。上記、protocol1用のRSAキ−またはprotocol2用のRSAキ−と共存させるが出来ます。
$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/test/.ssh/id_dsa): デフォルトのまま良いのであれば、そのまま[Enter]を押下−−↑ Enter passphrase (empty for no passphrase):(パスワ−ド入力) Enter same passphrase again:(再度、パスワ−ド入力) Your identification has been saved in /home/test/.ssh/id_dsa. Your public key has been saved in /home/test/.ssh/id_dsa.pub. The key fingerprint is: fd:ea:c3:3b:b1:49:7b:16:c3:20:56:54:41:bd:60:d1 test@fc10.jp The key's randomart image is: +--[ DSA 1024]----+ | ..o== | | . o E | | . . . . | | o.. . | | .S..o | | o.+ | | o =.o | | B.o | | .+* | +-----------------+id_dsa(秘密鍵)とid_dsa.pub(公開鍵)の2つのファイルが作成されているかどうかを確認します。
$ ls -l /home/test/.ssh/id_dsa* -rw------- 1 test test 736 2008-12-10 15:31 /home/test/.ssh/id_dsa -rw-r--r-- 1 test test 619 2008-12-10 15:31 /home/test/.ssh/id_dsa.pubid_dsa.pubをauthorized_keysという名前に変更して、パ−ミッションも変えます。
$ cp /home/test/.ssh/id_dsa.pub /home/test/.ssh/authorized_keys $ chmod 600 /home/test/.ssh/authorized_keys $ ls -l /home/test/.ssh/authorized_keys -rw------- 1 test test 619 2008-12-10 15:31 /home/test/.ssh/authorized_keysprotocol2のDSA鍵を利用して、SSHでログインできるか確認します。
$ ssh -2 localhost ←.sshフォルダにid_rsaが共存しない場合 $ ssh -2 -i /home/test/.ssh/id_dsa localhost ←.sshフォルダにid_rsaが共存する場合ログインできれば、プロンプトが返ってきます。ログインできない場合は、authorized_keys2をid_dsaから作成してないか、とか、configファイルの設定が間違っていないか確認してください。
●ed25519キ−の作成
※注意
「●「userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]」のためログイン出来ない」に記載しているとおりOpenSSHのバージョンによりDSA鍵を利用出来なくなっていますので注意してください。
protocol2用のDSAキ−を作成します。上記、protocol1用のRSAキ−またはprotocol2用のRSAキ−と共存させるが出来ます。
$ ssh-keygen -t ed25519 Generating public/private ed25519 key pair. Enter file in which to save the key (/home/test/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/test/.ssh/id_ed25519 Your public key has been saved in /home/test/.ssh/id_ed25519.pub The key fingerprint is: SHA256:Eu4l1EBG6AXD3jZ9GDmLFaD3U7M/C0+aLZx0C6S+Pys shiba@usagi The key's randomart image is: +--[ED25519 256]--+ | .o=*..o | | oo+.o= | | o.o++.=oo | | o+=oo.oo | | .+.S+. | | o +..o.. | | .. o.++. | | E =B.o | | .+=+++ | +----[SHA256]-----+id_dsa(秘密鍵)とid_dsa.pub(公開鍵)の2つのファイルが作成されているかどうかを確認します。
$ ls -l /home/test/.ssh/id_ed25519* -rw------- 1 test test 736 2022-12-22 15:31 /home/test/.ssh/id_ed25519 -rw-r--r-- 1 test test 619 2022-12-22 15:31 /home/test/.ssh/id_ed25519.pubid_ed25519.pubをauthorized_keysという名前に変更して、パ−ミッションも変えます。
$ cp /home/test/.ssh/id_ed25519.pub /home/test/.ssh/authorized_keys $ chmod 600 /home/test/.ssh/authorized_keys $ ls -l /home/test/.ssh/authorized_keys -rw------- 1 test test 619 2022-12-22 15:31 /home/test/.ssh/authorized_keysprotocol2のDSA鍵を利用して、SSHでログインできるか確認します。
$ ssh -2 localhost ←.sshフォルダにid_rsaが共存しない場合 $ ssh -2 -i /home/test/.ssh/id_ed25519 localhost ←.sshフォルダにid_rsaが共存する場合ログインできれば、プロンプトが返ってきます。ログインできない場合は、authorized_keys2をid_ed25519から作成してないか、とか、configファイルの設定が間違っていないか確認してください。
●パスフレーズなしでログインする方法
下記の手順で、パスフレーズなしのDSA鍵を作成します。
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa Generating public/private dsa key pair. Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: 93:e7:c4:5d:56:71:bc:f9:13:8c:a0:32:76:34:ef:2a root@hostA.xxx.yyy.org作成されたDSA鍵を確認します。
$ ls -l .ssh 合計 12 -rw------- 1 root root 668 2月 1 23:37 id_dsa -rw-r--r-- 1 root root 627 2月 1 23:37 id_dsa.pub「authorized_keys」を作成します。
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys再確認します。
$ ls -l .ssh 合計 16 -rw------- 1 root root 627 2月 1 23:38 authorized_keys -rw------- 1 root root 668 2月 1 23:37 id_dsa -rw-r--r-- 1 root root 627 2月 1 23:37 id_dsa.pubローカルに接続し、パスフレーズを聞かれずにログイン出来ればOKです。
リモート側にパスフレーズなしでログインするには、「authorized_keys」をリモート側に置きます。
リモート側からローカル側にパスフレーズなしてログインさせるには、ローカル側に「authorized_keys」を置き、リモート側に「id_dsa」を置きます。
$ ssh localhost Last login: Sun Jan 30 21:45:01 2011 from hostA.xxx.yyy.org
●デフォルトではない秘密鍵の作成
通常、秘密鍵作成は意識しなければid_rsaやid_dsaがデフォルトで作成されます。同じユーザで複数のサーバに各サーバ用の秘密鍵を使用してログインする場合秘密鍵のファイル名がバッティングしてしまいます。これに対応する方法を記載します。
まず、秘密鍵を作成するサーバに該当ユーザでログインします。次に、秘密鍵を作成します。
$ ssh-keygen -t dsa -f .ssh/id_dsa_test ← id_dsa_testを作成
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in .ssh/id_dsa_test.
Your public key has been saved in .ssh/id_dsa_test.pub.
The key fingerprint is:
0c:3f:be:4f:69:94:d8:66:a2:57:65:72:36:10:0d:2e test@*****.bigbang.mydns.jp
The key's randomart image is:
+--[ DSA 1024]----+
| ++ |
| . .. |
| . E o * |
| + + B . |
| S B |
| o B . |
| . o + |
| . + |
| ... |
+-----------------+
$HOME/.sshに秘密鍵と公開鍵が作成されているか確認します。
$ ls -l .ssh 合計 32 -rw------- 1 test test 655 9月 9 13:38 authorized_keys -rw------- 1 test test 618 9月 9 13:38 authorized_keys2 -rw------- 1 test test 736 9月 9 13:38 id_dsa -rw-r--r-- 1 test test 618 9月 9 13:38 id_dsa.pub -rw------- 1 test test 771 9月 27 02:28 id_dsa_test ← 秘密鍵が作成されている -rw-r--r-- 1 test test 619 9月 27 02:28 id_dsa_test.pub ← 公開鍵が作成されている -rw------- 1 test test 991 9月 9 13:38 identity -rw-r--r-- 1 test test 655 9月 9 13:38 identity.pubまだ、この段階ではこの秘密鍵を利用してログイン出来ません。公開鍵はサーバ側にFTP等を利用し保存します。
~/.sshディレクトリがある場合
$ mv ~/id_dsa_test.pub ~/.ssh $ cat ~/.ssh/id_dsa_test.pub >> authorized_keys2 $ chmod 600 authorized_keys2authorized_keys2というファイルに公開鍵を書き込みます。これでログイン出来るようになります
~/.sshディレクトリが無い場合
以下のようにして、作業してください。
$ cd ~ $ mkdir .ssh $ chmod 700 .ssh $ mv ~/id_dsa_test.pub ~/.ssh $ cat ~/.ssh/id_dsa_test.pub >> ~/.ssh/authorized_keys2 $ chmod 600 authorized_keys2authorized_keys2というファイルに公開鍵を書き込みます。
サーバにコピーした鍵は削除します。
$ rm ~/.ssh/id_dsa_test.pubこれでログイン出来るようになります。
●パスフレーズの変更
よそからSSHの鍵を受け取った場合、パスフレーズが複雑とか気に入らないとかと理由で変更したいと思ったことはないでしょうか。SSHの公開鍵認証は通常、認証前にパスフレーズを入力しますが、SSH公開鍵認証は所持している鍵を元々設定されているパスフレーズで復号化→復号化された鍵をサーバに送信して認証という手順なので、パスフレーズというのはローカルだけで簡単に変更することができます。
変更する書式は下記のとおりです。
ssh-keygen -p [-P 古いパスフレーズ ] [-N 新しいパスフレーズ ] \ [-f パスフレーズを変更するidentityファイル ]下記のように変更します。.ssh/id_dsa_testはローカルに存在する秘密鍵です。リモートサーバにログイン後、下記作業を実施するとリモートサーバ側の秘密鍵が変更されてしまいますので注意してください。
$ ssh-keygen -p -P ********** -N ********** -f .ssh/id_dsa_test Key has comment '.ssh/id_dsa_test' Your identification has been saved with the new passphrase.これでパスフレーズが変更されました。
下記の方法でも変更出来ます。
$ ssh-keygen -p -f .ssh/id_dsa_test Enter old passphrase: ← 現在のパスフレーズを入力 Key has comment '.ssh/id_dsa_test' Enter new passphrase (empty for no passphrase): ← 新しいパスフレーズを入力 Enter same passphrase again: ← 新しいパスフレーズを再入力 Your identification has been saved with the new passphrase.WindowsであればPuTTY付属のputtygen.exeでパスフレーズを変更することができます。puttygen.exeに鍵を現在のパスフレーズを入力して読み込ませると、パスフレーズ入力欄があります。そこを変更後、再度、秘密鍵を保存すればいいです。
●Authentication refused: bad ownership or modes for directory /home/user
/home/userのアクセス権を「700」や「755」等に設定するといいです。
●sftpの転送ログを記録する方法
/etc/ssh/sshd_configを以下のように変更します。
設定変更前 Subsystem sftp /usr/libexec/openssh/sftp-server 設定変更後 Subsystem sftp /usr/libexec/openssh/sftp-server -l VERBOSE次に、/etc/syslog.confに以下を追記します。
#auth log auth.* /var/log/authlog設定を反映させるため、sshdとsyslogをrestartします。
下記のようなログが記録されます。
console.logという約306Mの転送時に以下のようにログ(/var/log/messages)が出力されました。 Nov 13 20:47:50 host sftp-server[31332]: open "/home/hoge/console.log.filepart" / flags WRITE,CREATE,TRUNCATE mode 0666 Nov 13 20:49:01 host sftp-server[31332]: close "/home/hoge/console.log.filepart" bytes / read 0 written 321481637 Nov 13 20:49:01 host sftp-server[31332]: rename old "/home/hoge/console.log.filepart" / new "/home/hoge/console.log" Nov 13 20:49:01 host sftp-server[31332]: set "/home/hoge/console.log" / modtime 20120604-18:54:10
●Agent admitted failure to sign using the key.と表示される
各サーバで同じ鍵で認証できるように設定していたところ下記のようなエラーが表示されました。
Agent admitted failure to sign using the key. Password:どのクライアントも秘密鍵は同じで、どのサーバの公開鍵は一緒なのにと悩んでいたところ、下記コマンドを実行したら解決しました。
$ ssh-add ~/.ssh/id_dsa Identity added: .ssh/id_dsa (.ssh/id_dsa)
●「userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]」のためログイン出来ない
参考URL:SSH鍵の暗号化方式を強化してみた。
Fedora 22をFedora 23にアップグレードしたところこれまで使用していた秘密鍵(DSA鍵)でログイン出来なくなりました。/var/log/secureに下記のようなログが記録されていました。
userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]OpenSSHのバージョンは「openssh-7.2p2-6.fc23.i686」です。
どうもDSA鍵が使用出来なくなったみたいです。
PubkeyAcceptedKeyTypes
Specifies the key types that will be accepted for public key authentication as a
comma-separated pattern list. Alternately if the specified value begins with a ‘+’
character, then the specified key types will be appended to the default set instead
of replacing them. The default for this option is:
ecdsa-sha2-nistp256-cert-v01@openssh.com,
ecdsa-sha2-nistp384-cert-v01@openssh.com,
ecdsa-sha2-nistp521-cert-v01@openssh.com,
ssh-ed25519-cert-v01@openssh.com,
ssh-rsa-cert-v01@openssh.com,
ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,
ssh-ed25519,ssh-rsa
The -Q option of ssh(1) may be used to list supported key types.
Specifies the key types that will be accepted for public key authentication as a
comma-separated pattern list. Alternately if the specified value begins with a ‘+’
character, then the specified key types will be appended to the default set instead
of replacing them. The default for this option is:
ecdsa-sha2-nistp256-cert-v01@openssh.com,
ecdsa-sha2-nistp384-cert-v01@openssh.com,
ecdsa-sha2-nistp521-cert-v01@openssh.com,
ssh-ed25519-cert-v01@openssh.com,
ssh-rsa-cert-v01@openssh.com,
ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,
ssh-ed25519,ssh-rsa
The -Q option of ssh(1) may be used to list supported key types.
やむを得ないのでRSA鍵で再作成することにします。
●rsa(protocol2)キ−の作成
●「Could not load host key: /etc/ssh/ssh_host_dsa_key」がログに記録される
Fedoraをバージョンアップしたころからか、/var/log/messagesに「Could not load host key: /etc/ssh/ssh_host_dsa_key」が記録されるようになりました。
該当ファイルは存在し、所有者やアクセス権等を変更してみましたが状況は変わりませんでした。
やむを得ないのでキーを再作成することにしました。
# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -C '' -N '' Generating public/private dsa key pair. /etc/ssh/ssh_host_dsa_key already exists. Overwrite (y/n)? y Your identification has been saved in /etc/ssh/ssh_host_dsa_key. Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub. The key fingerprint is: SHA256:F69jmkvau4eG928QSXdWX9dfjnSnjoBiHs08crUSnVwE The key's randomart image is: +---[DSA 2048]----+ | L.o =+| | .o. .+o*| | +o+..o =o| | = B.+o ..| | S *o.oo..| | o * o*oo o| | + o .+.oo| | o *oo.*o| | . o=+ | +----[SHA256]-----+再作成後エラーは出力されなくなりました。
●SSH接続のタイムアウトを防ぐには
参考URL:SSH接続がタイムアウトで自動的に切断されないようにする
SSHは接続を持続するように設計されています。
しかし、SSHでクライアントからサーバに接続している経路上に存在するルータやファイヤーウォールによって一定時間通信のないコネクションを切断してしまう、ということによりSSHの自動切断という現象が発生します。
つまり、SSHの自動切断の原因はルータやファイヤーウォールが主です。
一定時間通信のないコネクションを切断するという行為は当然の動作です。
SSHの自動切断を防止するためには、一定期間毎に通信を行えば自動切断を回避できます。
SSHサーバ側での対策
SSHには「ClientAliveInterval」と「ClientAliveCountMax 」という設定値があります。
設定された秒数ごとに応答確認を行い、応答が無い場合、自動的にタイムアウトします。
この機能をSSHの自動切断回避に利用します。
それぞれの機能の詳細です。
「ClientAliveInterval」:ここで指定した秒数ごとに応答確認を行う。
「ClientAliveCountMax」:応答確認を行う回数。
デフォルト値は下記の通りです。
「ClientAliveInterval」のデフォルト値:0(※0だと何もしない)
「ClientAliveCountMax」のデフォルト値:3
つまり、何も設定していない場合は応答確認を行わず、その結果SSHの接続が切れてしまいますので、下記の設定をSSHの設定ファイルに追加します。
# vi /etc/ssh/sshd_config ClientAliveInterval 120 ClientAliveCountMax 3追加したらSSHを再起動します。
# systemctl restart sshdこれでOKです。
今後は120秒ごとに応答確認の通信を行います。
クライアント側からSSHを切断しない限りタイムアウトにはならずに接続は維持されます。
もし、何かしらの原因によりネットワークが切断されてしまった場合などでも、3回繰り返して応答が無ければ自動切断してくれるのでSSHの「ゴーストユーザー」が残る事もなく安心です。
SSHクライアント側での対策
SSH接続で利用するターミナルソフトの簡単な設定でSSHの自動切断を回避することができます。
PuTTYでの設定方法
メニューの「接続」をクリックします。
「セッションをアクティブに保つための null パケットの送信」の「Keepalive の間隔(秒、0 でオフ)」の値をデフォルトの「0」から任意の値(120など)に変更後、「Open」をクリックして接続します。

Tera Termでの設定方法
メニューの「設定」→「SSH」を開きます。

ハートビート(keep-alive)の秒数を設定して「OK」をクリックします。(デフォルト値:60)

メニューの「設定」→「設定の保存」をで設定した内容を保存します。

Linux Clientでの設定
/etc/ssh/ssh_configまたは~/.ssh/configに下記を追記します。
ServerAliveInterval 15設定した時間に応答がないと、ServerAliveCountMax の回数(デフォルト値: 3)応答確認し、応答がないとタイムアウトする。
例えば ServerAliveInterval 15 に設定すると15秒毎にサーバにメッセージを送り、ServerAliveCountMaxのデフォルト回数である3回まで繰り返します。
つまり、サーバが応答しなくなった後45秒後に接続を切断します。
●SSH接続するとno matching cipher found.と表示される
古いルータにssh接続すると「no matching cipher found.」と表示され接続できません。
下記のように対処すると接続できるようになりました。
$ vi ~/.ssh/config 下記を追記 Host xxx.xxx.xxx.xxx Ciphers aes128-cbc