从Windows到Linux的SSH,无需输入密码


11

我正在尝试从Windows到Linux使用ssh / scp,而不必输入密码。

这是我所做的,但似乎不起作用:

  • 使用Putty Key Generator(在Windows上)生成公共和私有密钥
  • 保存文件为id_rsa.pubid_rsa
  • 复制到 ~/.ssh
  • 在Linux框中添加了id_rsa.pub ~/.ssh/authorized_keys
  • 然后,我尝试ssh从Windows转到Linux机器,仍然需要输入密码

我想念什么吗?

Answers:


10

您必须在Windows上运行身份验证代理。

例如,Pageant,与PuTTY(图形SSH客户端)或Plink(等效于其命令行)结合使用。

您需要告诉Pageant您的SSH服务器的公钥。之后,它将在后台运行时处理服务器的身份验证请求。


2
注意:(这对我来说并不明显。)打开Pageant时,它将在右下角的通知区域中以图标形式打开。右键单击它,然后单击“ 添加密钥”,然后选择从puttygen生成的.ppk文件。
badjr


5

尝试Plink(腻子的一部分)

 plink -v youruser@yourhost.com -pw yourpw "some linux command"

3
+1可获得正确的响应,但是最好使用公用/专用密钥对而不是密码。
Ted Percival 2010年

尽管有其他选择,但是使用plink时,您将无法使用普通终端,例如:箭头键将
不适

3

设置SSH密钥身份验证可能有些棘手。听起来您覆盖了所有基地。通常会使人措手不及的一件事-您需要确保.ssh目录及其内容归您所有,并且仅由您读取/写入。

确保在所有.ssh目录上运行此命令:

chmod -R 700 on ~/.ssh

如果这样不起作用,请通过添加-vssh命令中来打开详细日志记录(您最多可以添加3 -vss以获得更多详细信息)。


2

我假设您的密钥不受密码保护,并且您得到的不是对密钥密码的请求。

Windows侧的腻子不使用〜/ .ssh,并且腻子没有默认的私钥设置。如果您使用的是cygwin之类的命令行ssh客户端,则可以在家外创建.ssh目录。从腻子中,您需要配置和保存会话。

在腻子配置对话框中,查看连接->数据,然后填写自动登录用户名字段。然后转到连接-> ssh->身份验证,并正确设置您的私钥。然后返回会话对话框,并保存该会话。您也可以根据需要设置主机名。

一旦保存了会话,就可以使用'putty -load“ savedsession”'。


另外,在目标计算机上使用chmod 700〜/ .ssh,并使用chmod 644〜/ .ssh /授权密钥。一旦按照您的指示进行操作并正确设置了权限,它便开始为我工作。
Blisterpeanuts

2

我用这个:

c:\> type c:\users\my_name\.ssh\id_rsa.pub | ssh root@172.110.1.171 "cat >> ~/.ssh/authorized_keys"


1

您可能还需要更改主目录的权限:

chmod 755 ~

1

Windows 7通过使用-i提供身份私钥的选项,我能够做到这一点:

ssh -i X:\ win路径\到\私钥remoteuser@remote.host.com

除了在远程主机上,我的授权密钥在/etc/ssh/authorized_keys/remoteuser和中/etc/ssh/sshd_config,我更改了

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

但我不知道SSH远程配置是否重要。


1

您所需要的只是跨平台ssh命令行工具ssh-keygenssh-copy-id。Windows的git包括它们。

从git安装的bashshell中执行以下操作:

#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 "# /superuser/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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.