ssh是一个远程连接协议,使用非对称加密,有效保障数据安全。
windows使用ssh进行远程连接可以使用xshell、putty,等工具进行连接,这里使用命令行工具。
- Linux:自带了一个ssh连接工具,不需要下载安装了。
- Windows:可以下载git for windows,携带了众多实用Linux命令。也可以到官网下载。除了安装位置其它默认就可以了。安装完成之后可以看到多了一个git bash,可以在里面输入linux命令。
然后输入:
ssh <远程主机的用户名>@<远程主机的域名或ip>
就可以连接上了。前提是远程主机已经启动了ssh服务器并且开放了连接端口(默认是22)。连接时可以带上-p
参数来指定端口。之后会提示你输入密码。如果是第一次连接该远程主机,会看到有一串看上去像乱码的文字,这是输入yes就可以了。
每次连接都要输入密码真是太麻烦了!有没有什么方便又安全的方法呢?
当然有了,首先输入:
ssh-keygen -t rsa -C <注释文字>
生成用于ssh连接的公钥和私钥。第一个-t
参数用于指定密钥类型,可省略;第二个-C
参数用于指定一段注释文字,可省略。
敲下回车之后会提示你输入密钥文件的保存路径,如果默认回车就可以了。之后会提示你输入密码短语两次,如果不是需要特别安全的话可以直接回车。
之后就会在默认地址生成.ssh文件夹,其中id_rsa
是私钥文件,用于和公钥配对,不可让别人知道;id_rsa.pub
是公钥,需要放到远程服务器上。(文件名如果使用了其他的密钥类型会大同小异)。
之后执行命令:
ssh-copy-id -i <.ssh文件夹保存位置>/.ssh/id_rsa.pub <远程主机的用户名>@<远程主机的域名或ip>
就可以把公钥文件复制到远程主机上,需要你输入远程主机的密码。以后使用ssh
命令的时候就可以不用输入密码了。
如果你经常使用远程连接,可能会发现远程主机时常过了一会不操作就动不了了,怎么样都动不了,这是一种安全机制,当然可以解决,只要在ssh的配置文件里配置就好了。(Linux:/etc/ssh/ssh_config;Windows:/etc/ssh/ssh_config,windows是git bash上的,具体位置取决于你的git安装位置)
在最后面加上
# 与远程主机保持心跳
TCPKeepAlive yes
ServerAliveInterval 30
其原理是每隔几十秒钟发送一次心跳包以维持连接。