web-dev-qa-db-ja.com

パスワードを入力せずにWindowsからLinuxにSSH

パスワードを入力せずにWindowsからLinuxにssh/scpを使用しようとしています。

これは私がやったことであり、うまくいかないようです:

  • puTTY Key Generatorを使用して生成された公開鍵と秘密鍵(Windows)
  • ファイルをid_rsa.pubおよびid_rsaとして保存しました
  • それらを~/.sshにコピーしました
  • linuxボックスに~/.ssh/authorized_keysにid_rsa.pubを追加
  • 次に、WindowsからLinuxボックスにsshしようとしましたが、それでもパスワードを入力する必要があります

何か不足していますか?

11
Josh

Windowsで認証エージェントを実行する必要があります。

たとえば、 PageantPuTTY (グラフィカルSSHクライアント)またはPlink(同等のコマンドライン)と組み合わせて使用​​されます。

PageantにSSHサーバーの公開鍵を伝える必要があります。その後、バックグラウンドで実行中にサーバーの認証要求を処理します。

10
Silvio Donnini
8
Eduardo

Plink(PuTTYの一部)を試す

 plink -v [email protected] -pw yourpw "some linux command"
4

SSH鍵認証のセットアップは少し難しい場合があります。拠点をすべてカバーしているようですね。多くの場合、油断しないでください。.sshディレクトリとそのコンテンツは、自分が所有し、自分だけが読み取り/書き込み可能であることを確認する必要があります。

これを必ず実行してください(すべての.sshディレクトリで):

chmod -R 700 on ~/.ssh

それが機能しない場合は、sshコマンドに-vを追加して詳細ロギングをオンにします(詳細度を高めるために最大3つの-vssを追加できます)。

3
rcw3

私はこれを使いました:

c:\> type c:\users\my_name\.ssh\id_rsa.pub | ssh [email protected] "cat >> ~/.ssh/authorized_keys"

2
Robert Djabarov

私はあなたのキーがパスワードで保護されていないと想定しています、そしてあなたが得ているものはあなたのキーのパスワードの要求ではありません。

〜/ .sshはWindows側のPuTTYでは使用されず、PuTTYにはデフォルトの秘密鍵設定がありません。 cygwinなどのコマンドラインsshクライアントを使用している場合は、家の外に.sshディレクトリを作成するとうまくいきます。 PuTTYから、セッションを構成して保存する必要があります。

PuTTY構成ダイアログから、接続->データを確認し、自動ログインユーザー名フィールドに入力します。次に、接続-> ssh-> authに移動し、秘密鍵を正しく設定します。次に、セッションダイアログに戻り、このセッションを保存します。必要に応じて、ホスト名を設定することもできます。

保存したセッションを取得したら、「PuTTY -load "savedsession"」を使用できます。

2
Andrew B

必要なのは、クロスプラットフォームのsshコマンドラインツール、ssh-keygenssh-copy-id。 git for Windowsにはそれらが含まれています。

Git-installed bash Shellからこれを実行します。

#By default this puts keyfile pair in ~/.ssh/id_rsa & ~/.ssh/id_rsa.pub :

ssh-keygen.exe -t rsa -b 2048 
ssh-copy-id -i ~/.ssh/id_rsa.pub  $remoteuser@$remotehost

# These two chmod lines are needed on unix platforms, probably not on Windows. 
# typically ssh refuses to use a private key file 
# if it is less-well protected than this:
chmod 700 ~/.ssh
chmod 640 ~/.ssh/id_rsa

または、PowerShellで次のスクリプトを実行します。

Param(
  [Parameter()][string]$keyfile="id_rsa",
  [Parameter()][string]$remotehost,
  [Parameter()][string]$remoteuser
  )
write-Host "# ---------------------------------------------------------------------------------#"
write-Host "# Create an RSA public/private key pair, and copy the public key to remote server  #"
write-Host "#                                                                                  #"
write-Host "# https://superuser.com/questions/96051                                            #"
write-Host "#         ssh-from-windows-to-linux-without-entering-a-password/1194805#1194805    #"
write-Host "#                                                                                  #"
write-Host "# ---------------------------------------------------------------------------------#"

write-Host "Keyfile pair will be saved at : ~/.ssh/$keyfile, ~/.ssh/$keyfile.pub"
write-Host "And copied to $remoteuser@$remotehost"
write-Host ""
write-Host "You will need a password for the copy operation."
write-Host ""

if( -not $(ls ~/.ssh) ) { mkdir ~/.ssh }
$sshdir=$(get-item ~/.ssh/).Fullname

#By default this puts keyfile pair in ~/.ssh/id_rsa & ~/.ssh/id_rsa.pub :
ssh-keygen.exe -t rsa -b 2048 -f "$sshdir$keyfile"

# ssh-copy-id somehow didn't work in Powershell so I called it via bash
bash -c "ssh-copy-id -i ~/.ssh/$keyfile.pub $remoteuser@$remotehost"

# I'm not sure if these two chmod lines work on windows but 
# typically ssh refuses to use a private key file 
# if it is less-well protected than this:
chmod.exe 700 $sshdir
chmod.exe 640 "$sshdir$keyfile"

この後、パスワードなしのログインはsshscpの両方で機能するはずです。

1
Chris F Carroll

また、ホームディレクトリの権限を変更する必要がある場合もあります。

chmod 755 ~
1
Haydn

これをWindows 7から正確に行うには、-iオプションを使用してID秘密鍵を指定します。

ssh -i X:\ win-path\to\private-key [email protected]

リモートホストでは、許可されたキーが/etc/ssh/authorized_keys/remoteuserにあり、/etc/ssh/sshd_configにあることを除いて、

#AuthorizedKeysFile     .ssh/authorized_keys
AuthorizedKeysFile      /etc/ssh/authorized_keys/%u

しかし、SSHリモート構成が重要かどうかはわかりません。

1
amphibient