linux通过openssh无密码访问window
对于习惯了使用ssh连接linux执行命令的用户来说,win10已经提供了新的可能,内置了openssh,windows也可以很容易的提供sshd服务,然后执行powershell。对于win7需要手动安装,本文主要介绍win7安装openssh和linux无密码访问linux执行程序。
win7安装openssh
安装包下载地址:
https://github.com/PowerShell/Win32-OpenSSH/releases
64位系统下载
OpenSSH-Win64.zip
将下载的zip包解压缩到C:\Program Files\OpenSSH
安装sshd服务
PS C:\Windows\system32> cd 'C:\Program Files\OpenSSH '
PS C:\Program Files\OpenSSH> powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
[SC] SetServiceObjectSecurity 成功
[SC] ChangeServiceConfig2 成功
[SC] ChangeServiceConfig2 成功
sshd and ssh-agent services successfully installed
添加入站防火墙端口22,允许22端口可访问
PS C:\Program Files\OpenSSH> New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Directio
n Inbound -Protocol TCP -Action Allow -LocalPort 22
win7没这个命令,自己去手动在防火墙配置添加:
控制面板\所有控制面板项\Windows 防火墙\高级设置
启动ssh服务:net start sshd
现在已经可在linx使用密码访问服务了。
linux无密码访问windows
配置文件位置C:\ProgramData\ssh\sshd_config,所在的目录是隐藏目录。打开sshd的配置文件之后,修改如下参数,去掉前面的注释
PubkeyAuthentication yes
注释掉结尾两行
重启sshd
net stop sshd ;net start sshd
Linux生成密钥对:
ssh-keygen -t rsa -f id_rsa
把生成的公钥id_rsa.pub内容添加到windows的
%systemdrive%\Users\<user>\.ssh\authorized_keys (如果文件不存在需要先创建)
linux下面执行 ssh -i .\id_rsa user@host 就可以无密码访问linux了。 或者把id_rsa访问~/.ssh目录下,这样可以直接
ssh user@host
遇到如下错误:
2538868 2019-07-18 10:26:11.645 debug1: userauth_pubkey: test pkalg rsa-sha2-512 pkblob RSA SHA256:6LcR7NR13TTY9qR7G6HumknjLfjyrW/GIX3NfQa13Jg [preauth]
2538868 2019-07-18 10:26:11.645 debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
2538868 2019-07-18 10:26:11.648 Authentication refused.
2538868 2019-07-18 10:26:11.648 Failed publickey for user from 10.1.1.4 port 48402 ssh2: RSA SHA256:6LcR7NR13TTY9qR7G6HumknjLfjyrW/GIX3NfQa13Jg
基本都是 authorized_keys 文件权限设置的不正确
只能 System, Administrators和user 三个用户对
authorized_keys 有所有权限,并且文件的所有者需要是user。
检查文件权限:
icacls %systemdrive%\Users\<user>\.ssh\authorized_keys
ssh客户端配置错误日志输出:
ssh客户端查看日志方式 ,使用参数-vv
ssh -vv
ssh服务器端输出日志方式:
修改配置文件 sshd_config
,然后重启sshd
SyslogFacility LOCAL0
LogLevel
toDEBUG
(orDEBUG2
/DEBUG3
for higher levels of logging
linux环境下权限配置
no 'w
' for go anywhere (group or others)
700 for .ssh
600 for .ssh/authorized_keys
chmod go-w /home/your-user
chmod 700 /home/your-user/.ssh
chmod 600 /home/your-user/.ssh/authorized_keys*
这其中很多波折没有一一写出来,linux的日志比较详细,windows要么提示权限不对,要么提示失败,没有具体的错误点提示。微软在github上有很多解释说的很不错,在最后要放弃的时候发现只要把你的authorized_keys文件跟.ssh目录下的其它文件配置一致是不是就能解决问题,一试还真行。
linux查看服务sshd日志在tail -f /var/log/secure
https://github.com/PowerShell/Win32-OpenSSH/wiki/ssh.exe-examples
https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps
https://github.com/PowerShell/Win32-OpenSSH/issues/870
https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH