SSHを介してWindowsマシンからLinuxマシンにファイルをコピーする簡単なバックアップスクリプトを自動的に実行するように設定しようとしていました。
多くの簡単なオンラインチュートリアルが示唆しているように、pscp
をputtygen
で生成した秘密鍵とともに使用し、対応する公開鍵(PuTTY自体によってコピー/貼り付け形式で提示)をauthorized_keys
Linuxのファイル。同じ構成で、他の2つのWindowsマシンから別のLinuxマシンまで機能することを考えると、これはかなり簡単に思えます。
Linuxマシンにrootとしてログインできることを考えると、AFAICSに接続の問題はなく、sshにも同じことが言えます。設定ファイル(sshd_config
)のAuthorizedKeysFile
は~/.sshd/authorized_keys
に設定されています。
「サーバーがキーを拒否しました」というエラーが表示され続けますが、何をしても...ログに認証の問題は表示されません...
さらにテストを行い、logLevel
の値をVERBOSE
またはDEBUG2
または3
に設定する予定ですが、問題の緊急性と、マシンで実際にテストするには、マシンが実際の職場からかなり離れた場所にあることを考えると、多くの手間がかかります...
これは実際にはsshバージョンやある種の問題に関連しているようです...
ルートのフォルダーに作成するのではなく、ユーザーのauthorized_keys
ディレクトリ(.ssh
)内の/user/.ssh/
ファイルに公開鍵を挿入する必要がある可能性も検討していました(作成しません) sshd_config
のAuthorizedKeysFile
の値のため、非常に理にかなっています。
私はsshサーバーのLogLevel
set o VERBOSE
を使用していくつかのテストを行いましたが、情報を取得できませんでした(責任の問題)。代わりに、ここで別のソースから出力/デバッグログを取得します。同じエラーが表示されているようです...
Connection from 192.168.0.101 port 4288
debug1: Client protocol version 2.0; client software version OpenSSH_4.5
debug1: match: OpenSSH_4.5 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.5
debug1: permanently_set_uid: 22/22
debug1: list_hostkey_types: ssh-rsa,ssh-dss
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST received
debug1: SSH2_MSG_KEX_DH_GEX_GROUP sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_INIT
debug1: SSH2_MSG_KEX_DH_GEX_REPLY sent
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: KEX done
debug1: userauth-request for user dcowsill service ssh-connection method none
debug1: attempt 0 failures 0
debug1: PAM: initializing for "dcowsill"
debug1: userauth-request for user dcowsill service ssh-connection method publickey
debug1: attempt 1 failures 1
debug1: test whether pkalg/pkblob are acceptable
debug1: PAM: setting PAM_RHOST to "192.168.0.101"
debug1: PAM: setting PAM_TTY to "ssh"
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
Failed publickey for dcowsill from 192.168.0.101 port 4288 ssh2
debug1: userauth-request for user dcowsill service ssh-connection method publickey
debug1: attempt 2 failures 2
debug1: test whether pkalg/pkblob are acceptable
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
Failed publickey for dcowsill from 192.168.0.101 port 4288 ssh2
Connection closed by 192.168.0.101
プログラムが所有者の権限でauthorized_keys
ファイルを開こうとしているようですが、問題の原因に関する詳細はありません。最後に、ファイルとフォルダの権限をチェックして再確認しましたが、すべて問題ありません。
私が知っているいくつかの考えられる理由は、ファイルのアクセス許可に関連しており、これらはほとんどが広すぎるため、特に2つの理由を思い出すことができます
.ssh
および/またはauthorized_keysファイルのアクセス許可(それ以上の場合は、それぞれ700/600に設定します)実行できるサーバーにrootアクセス権がある場合、デバッグオプションと非デーモンオプションを使用して別のポートで追加のsshdサーバーを起動すると、キーの正確な理由が拒否されます。
Sudo `which sshd` -p 2020 -Dd
サーバー上
その実行を終了した後、sshを実行します。
ssh -p 2020 -i /path/to/refusedkey
サーバー出力は拒否の理由を教えてくれます
明らかなチェック
authorized_keys ssh-rsa AA...long_line_of_char comment
PuTTY genの形式は、別の形式を提供することがあります。
承認:
キーは、接続するユーザーに応じて、ID〜rootまたは〜userにデプロイする必要があります。
それほど明白ではない:
PermitRootLogin no
またはコメント)authorized_keysのデフォルトの場所AuthorizedKeysFile %h/.ssh/authorized_keys
authorized_keys AuthorizedKeysFile /foo/bar/authorized_keys.%h
のサンプルカスタムロケーション
/foo/bar
dirにあります。authorized_keys.root
内authorized_keys.user
では、ファイルはルートによって所有されています実行:
Sudo `which sshd` -p 2020 -Dd
あるセッションおよび別のセッションでrootとして実行:
ssh -p 2020 -i /path/to/refusedkey refusedkeyusername@hostname
理由を理解するために働いた。ユーザーID権限が700に設定されていません。以下のようにo/pを取得しました
debug1: trying public key file /home/userid/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
Authentication refused: **bad ownership** or modes for directory /home/sapadmin
debug1: restore_uid: 0/0
Failed publickey for userid from 172.31.2.12 port 27382 ssh2: RSA
Connection closed by 172.31.2.12 [preauth]
oK! 1つの理由は、passwdファイルのユーザーホームディレクトリが、ファイルのコピー元のディレクトリではないことです。 rootだけがすべてのウェアからコピーできますが、他のユーザーはできません!
たとえば、/ backupディレクトリからコピーする場合は、scpがauthorized_keys "/backup/.ssh/への正しいパスを見つけるために、認証するユーザーがホームディレクトリを/ backup(所有)に設定していることを確認してください。 authorized_key」
2番目に、 "ssh-rsa AA ...."を使用してPuTTYキージェネレーターからテキストを1行に正確にauthorized_keysファイルにコピーしてください。 「rsa-key-xxx ..」のようなコメントは最後から削除できます。 authorized_keysファイルは、ユーザー/グループの幸運を所有している必要があります!
私の場合、次のようにして解決しました:
chmod 700 myuserdir/.ssh
chmod 600 myuserdir/.ssh/authorized_keys
Windowsボックスでは、puttygenを使用してrsa秘密鍵を生成する代わりに、cygwin.orgからcygwinをダウンロードしました。デフォルトでいくつかのパッケージを提供します。 OpenSSHをインストールするようにNetパッケージを変更しました。これにより、ssh-keygenプログラムがインストールされました。だから、私は走った:
ssh-keygen -t rsa
およびパスコードを空のままにしたid_rsa
にc:/cygwin/home/myusername/.ssh
という名前の秘密鍵が作成されましたid_rsa
を選択します(公開id_rsa.pub
ではありません)。PuTTY.ppk
を入力します。これで、ユーザーもパスワードも入力せずに接続できます。
共有したデバッグサーバーログから、クライアント側で指定したキーが/testuser/.ssh/authorized_keysで使用可能なものと一致しないように見えます。
/testuser/.ssh/authorized_keysが予想される場所である場合は、クライアント側で使用される秘密鍵と一致する公開鍵行があることを確認する必要があります。つまり、クライアントでid_rsaを使用している場合は、次のid_rsa.pubを確認します/testuser/.ssh/authorized_keysの行の1つと完全に一致します。
サーバー上のauthorized_keysファイルの場所がわからない場合は、クライアント側で正しいユーザー名を指定しているかどうかを確認する必要があります。