首页 > linux > linux通过openssh无密码访问window

linux通过openssh无密码访问window

2019年7月18日 发表评论 阅读评论

对于习惯了使用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 防火墙\高级设置

打开防火请22端口

启动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 to DEBUG (or DEBUG2/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
分类: linux 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.