搭建个人多机器ssh连接平台

最近新配了个主机,有了多个设备,ssh连接的功能可以优化很多体验,便又开始鼓捣。以前都是windows连各种linux,比较方便;这次是在windows之间,还是小查了好一会儿,留个记录

SSH连接的基本模型便是: 客户端机器 ----connect----> 服务端机器。


SSH客户端准备

Windows操作系统(以win10为例)

操作系统会自带OpenSSH Client(通过 开始->设置->应用->可选功能 查看)

所需操作仅为生成自己的ssh公钥和私钥,为ssh连接的免密连接做准备(不免密到可以不用,但ssh key真的很常用)

  • 打开命令行(win+R cmd进入的就是home目录,一般为C:\Users\用户名这样最方便)
  • 输入命令ssh-keygen -t rsa -C "email@email.com",没有特殊要求的话一路回车即可。email部分随意仅用于生成rsa,一般就自己选个邮箱填好了
  • 此后,在C:\Users\用户名\.ssh\中会出现id_rsa和id_rsa.pub,分别为私钥钥和公钥。以后将公钥放到目标服务器机器的对应位置处可作为免密连接的前提

Linux操作系统

系统自带,同windows下的操作,默认在~/.ssh/


SSH服务器准备

Windows操作系统(以win10为例)

一般需要安装OpenSSH Server,进入 开始->设置->应用->可选功能 可安装。

操纵ssh服务器的常用命令:

Get-Service sshd	# 查看服务器状态(是否开启)
Start-Service sshd	# 打开服务器
Stop-Service sshd	# 关闭服务器
Restart-Service sshd	# 重启服务器

应该会需要管理员权限,win+X呼出选项然后选择Windows PowerShell(管理员)应该最方便;用管理员权限打开cmd也好(其实一般单用户的电脑开启cmd时就是管理员的权限吧,不清楚;没有sudo真难受)

关于网传runas /user:administrator cmd的说法,我始终不知道administrator的密码是什么,但其实自己的用户也是管理员权限,换成自己的用户名应该也一样;但是感觉就是多此一举了

至此,其实就可以进行ssh连接的操作了:作为服务器的机子打开ssh服务器,作为客户端的机子通过ssh username@ip-address命令申请连接(一般端口就默认22, 也就是-p 22),然后输入服务器机子的密码就好。命令whoami可知username,命令ipconfig可知ip-address

曾经对这个密码是什么纠结了好久,结果还是自己的锅,见 https://www.zhihu.com/question/551485628/answer/2657902297

然而为了连接方便,会在配置一下达到免密的效果:

  • 在服务器C:\Users\用户名\.ssh\中新建authorized_keys文件,将客户端的公钥(id_rsa.pub)的内容放到服务器该文件中;
  • 修改服务器C:\ProgramData\ssh\中的ssdh_config文件
# 确保此3行正确且未被注释
PubkeyAuthentication yes	# 这个一般初始状态为被注释,34行左右
AuthorizedKeysFile .ssh/authorized_keys	# 这个一般未被注释,38行左右
PasswordAuthentication no	# 这个一般初始状态为被注释,且配置为yes,51行左右

# 注释此2行,一般在文件尾
# Match Group administrators
#        AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
  • 重启ssh服务器,Restart-Service sshd,此后添加过公钥的客户端在登录服务器时将无需输入密码

Linux操作系统

一般服务器也会自带,如果没有就apt、pacman装一下;ssh连接的端口应该是22,需要打开(阿里云的话会有安全组,里面添加设置)

操纵ssh服务器的命令:

systemctl start sshd.service	# 开启ssh服务器
systemctl enable sshd.service	# 允许开机自启ssh服务器
systemctl restart sshd.service	# 重启ssh服务器

免密ssh连接:
将客户端(也就是访问方)的id_rsa.pub的内容添加到服务器(被访问端)的~/.ssh/authorized_keys中,然后就ok了。

命令行操作的话可以参考这个,不过可以先通过密码用vscode的remote-ssh连接,然后直接复制过去就行


Visual Studio Code 优化体验

在客户端使用vscode插件,会方便很多。下载插件"Remote - SSH",左下角出现绿色相向箭头图标则完成。

点击该图标,依次选择Connect to Host -> Configure SSH Hosts -> C:\Users\用户名.ssh\config,然后按照样例填写目标服务器Host相关信息

Host alias		# alias:自己起个别名便于区分
    HostName hostname	# hostname:即服务器的ip-address
    User user		# user:即服务器的username
    # Port xxxx 若需配置端口则如是

进入Connect to Host 然后选择对应别名的服务器,即可开始连接;初次连接需要在服务器装相应的插件,选对应操作系统即可;若没有进行免密登录的配置,则几乎每部操作都要输密码,挺要命的。

scp传输文件

scp local_file remote_username@remote_ip:remote_folder
posted @ 2022-09-03 15:34  Xlucidator  阅读(115)  评论(0编辑  收藏  举报