SSH入门

如何使用ssh连接两台windows机器

假设机器A需要ssh连接机器B

  1. A和B均需安装OpenSSH,见Windows安装OpenSSH
  2. 服务端获取用户名 echo %username%
  3. 服务端开启 sshd 服务 net start sshd 或者 Start-Service sshd

    • net start sshdStart-Service sshd 都是用来启动 OpenSSH 服务器的命令,但是它们有一些区别。前者是一个 Windows 命令行工具,它可以在 cmd 或 PowerShell 中使用,但是需要管理员权限。后者是一个 PowerShell 命令,它只能在 PowerShell 中使用,也需要管理员权限。二者的效果是一样的,都会启动 sshd 服务,但是后者可以提供更多的参数和选项
  4. 服务端查询ip地址

1
2
3
4
5
6
7
#局域网
ipconfig /all

#公网
curl ipinfo.io
curl cip.cc
curl ifconfig.me
  1. (optional) 内网穿透
    如果机器A需要通过互联网连接机器B,并且机器B的情况是与路由器连接,并通过路由器上网,那么机器B获得的是私有IP,对互联网不可见。要从外部网络访问这些设备,通常要使用内网穿透技术:
  1. 客户端连接服务端,密码为 microsoft 密码,而不是开机pin
1
ssh username@ip

实现免密连接

假设机器A需要免密连接机器B

  1. 机器A生成密钥,这里我们使用 rsa 密钥
1
ssh-keygen -t rsa

文件名随意,假设你命名为 id_xxx,建议放在 $env:USERPROFILE\.ssh

  1. 将机器A的 id_xxx.pub 的内容以任意方式追加在机器B的 $env:USERPROFILE\.ssh、authorized_keys 末尾(如果没有这个文件就手动创建)
  2. 修改 C:\ProgramData\ssh\sshd_config,检查以下内容
1
2
3
4
5
6
7
8
# 不应该被注释
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys
PasswordAuthentication yes

# 需要被注释
Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

每次修改完这个文件后应该在终端重启 sshd 服务:

1
Restart-Service sshd
  1. 机器A连接机器B,默认使用的私钥是id_rsa,可以使用 -i 来指定具体私钥
1
ssh -i /your_path/id_xxx username@ip

参考资料