准备vscode 插件
- 在vs code的扩展商店中搜索remote-ssh, install
配置remmote-ssh 插件
使用快捷点, ctrl + shift + P 输入config
选择第一个,在.ssh 目录的config文件
按照以下格式配置
1 2 3 4 5
Host Personal HostName 172.16.1.1 User root Port 22 IdentityFile C:\Users\ld\.ssh\id_rsa
- Host: 自定义的服务器名称,用于个人区分
- HostName: 需要远程的服务器的IP 地址
- User: 远程服务器用的账号
- Port: 默认ssh 端口22
- IdentityFile: 免登录的id_rsa路径
注意: 多次实验加入IdentityFile 都不能做到通过跳板机免密码,最后把客户机的id_rsa.pub添加到target 才免密, 相当于直接可以连接target机器了。
如果通过跳板机连接服务器 有时候我们需要跳板机来连接服务器,也即先连接一台跳板机服务器,然后通过这台跳板机所在的内网再次跳转到目标服务器。 最简单的做法就是按上述方法连接到跳板机,然后在跳板机的终端用ssh指令跳转到目标服务器,但这样跳转后,我们无法在VScode中打开服务器的文件目录,操作起来很不方便。我们可以把config的设置改成如下,就可以通过c00跳板机跳转到c01了
1 2 3 4 5 6
Host BackupCluster HostName 1.16.1.1 User root Port 22 ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -W %h:%p -q Personal IdentityFile C:\Users\ld\.ssh\id_rsa
- ProxyCommand: openssh的安装目录(我这里是C:\Windows\System32\OpenSSH\ssh.exe)
- -W表示stdio forwarding模式 接着后面的%h是一个占位符,表示要连接的目标机,也就是Hostname指定的ip或者主机名
- %p同样也是占位符,表示要连接到目标机的端口。
- %h, %p这里可以直接写死固定值,但是使用%h和%p可以保证在Hostname和Port变化的情况下ProxyCommand这行不用跟着变化
openssh 的安装方法
以管理员身份运行window Powershell,然后键入如下两条命令
1
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
这条是用来检测是否有适合安装的openssh软件,正常情况下应有如下返回:
1 2 3 4
Name : OpenSSH.Client~~~~0.0.1.0 State : NotPresent Name : OpenSSH.Server~~~~0.0.1.0 State : NotPresent
第二条命令:
1
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
如果安装完成应有如下返回:
1 2 3
Path : Online : True RestartNeeded : False
免密码登录 如从A登录B,A=>B
本机创建ssh密钥, 生成在~/.ssh目录下
1
ssh-keygen -t rsa
说明:
- authorized_keys:其实就是存放各个机器公钥的地方,
- id_rsa : 生成的私钥文件,
- id_rsa.pub : 生成的公钥文件,
- know_hosts : 已知的主机公钥清单,
设置互信其实就是将id_rsa.pub公钥信息发送到需要被信任的机器上的authorized_keys文件中即可,也就是A发送到B上authorized_keys文件中
发送密钥 在A 机上运行
1
ssh-copy-id root@192.168.x.x
如果ssh-copy-id执行不了的话(没有ssh默认库的情况),可以使用scp进行发送,即:
1
scp -p ~/.ssh/id_rsa.pub root@192.168.x.x:/root/.ssh/authorized_keys
通过以上命令, 即可将公钥发送过去,发送过去之后可以登录B机器查看authorized_keys文件,可以看到了机器A的公钥信息,如过是多个机器发送给B的话则保存多个公钥信息,如下 发送成功之后,再次ssh登录,从A机器登录到B 机器。