如何使用ssh连接两台windows机器
假设机器A需要ssh连接机器B
- A和B均需安装OpenSSH,见Windows安装OpenSSH
- 服务端获取用户名
echo %username%
服务端开启
sshd
服务net start sshd
或者Start-Service sshd
net start sshd
和Start-Service sshd
都是用来启动 OpenSSH 服务器的命令,但是它们有一些区别。前者是一个 Windows 命令行工具,它可以在 cmd 或 PowerShell 中使用,但是需要管理员权限。后者是一个 PowerShell 命令,它只能在 PowerShell 中使用,也需要管理员权限。二者的效果是一样的,都会启动 sshd 服务,但是后者可以提供更多的参数和选项
服务端查询ip地址
1 | 局域网 |
- (optional) 内网穿透
如果机器A需要通过互联网连接机器B,并且机器B的情况是与路由器连接,并通过路由器上网,那么机器B获得的是私有IP,对互联网不可见。要从外部网络访问这些设备,通常要使用内网穿透技术:
- 本人常用cpolar
- 客户端连接服务端,密码为 microsoft 密码,而不是开机pin
1 | ssh username@ip |
实现免密连接
假设机器A需要免密连接机器B
- 机器A生成密钥,这里我们使用
rsa
密钥
1 | ssh-keygen -t rsa |
文件名随意,假设你命名为 id_xxx
,建议放在 $env:USERPROFILE\.ssh
下
- 将机器A的
id_xxx.pub
的内容以任意方式追加在机器B的$env:USERPROFILE\.ssh、authorized_keys
末尾(如果没有这个文件就手动创建) - 修改
C:\ProgramData\ssh\sshd_config
,检查以下内容
1 | # 不应该被注释 |
每次修改完这个文件后应该在终端重启 sshd
服务:
1 | Restart-Service sshd |
- 机器A连接机器B,默认使用的私钥是
id_rsa
,可以使用-i
来指定具体私钥
1 | ssh -i /your_path/id_xxx username@ip |