ssh登录方法

服务端配置

配置文件/etc/ssh/sshd_config

PermitRootLogin yes  #允许root用户登录
PasswordAuthentication no #允许密码登录
RSAAuthentication yes #启用rsa认证
PubkeyAuthentication yes #启用公钥认证

公钥文件~/.ssh/authorized_keys 每一行记录一个公钥,持有相应私钥的用户可登录 把客户端生成的.pub公钥文件,复制里面的内容到此文件即可 注意删除末尾邮箱,如果生成的.pub文件最末尾带有邮箱

# 为 .ssh 目录指定权限
chmod 700 ~/.ssh
# 为 authorized_keys 指定权限
chmod 600 authorized_keys
# 清除root密码
passwd -d root
systemctl restart sshd

删除root密码方法

  • passwd -d root
  • 编辑/etc/shadow,删除root那一行第一个与第二个冒号之间的内容

客户端配置

使用命令生成密钥对 ssh-keygen -t rsa -f "文件名"

参数 解释
-b 采用长度1024bit的密钥对,b=bits,最长4096,不过没啥必要
-t rsa 采用rsa加密方式,t=type
-f 生成文件名,f=output_keyfiles
-C 备注,C=comment

配置文件~/.ssh/config

Host 连接A名称
HostName 机器Aip
User 用户名
IdentityFile ~/.ssh/私钥A_rsa文件

Host 连接B名称
HostName 机器Bip
User 用户名
IdentityFile ~/.ssh/私钥B_rsa文件

用户可以配置多个ssh 公钥/密钥 对

当服务器配置发生变化时,需要删除~/.ssh/known_hosts文件

连接认证

sh-copy-id命令 可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。

authorized_keys 文件用来验证 client 。使用 ssh-copy-id 命令将本地公钥复制到远程主机之后可以实现免密登录远程主机。

如果不传入 -i 参数,ssh-copy-id 使用默认 ~/.ssh/identity.pub 作为默认公钥。如果多次运行 ssh-copy-id ,该命令不会检查重复,会在远程主机中多次写入 authorized_keys 。

使用 ssh-copy-id 的主要功能就是免密码登录远程主机。成功运行该命令之后,就可以免去密码登录远程主机。

注意本地 ~/.ssh/id_rsa 的权限,chmod 400 ~/.ssh/id_rsa ,该文件包含用于授权的私钥,如果该文件可以被其他用户访问,ssh 会忽略该私钥。


# 上传本机公钥
ssh-copy-id -i ~/.ssh/id_rsa.pub username@IP

#有config时
ssh username@ip

#无config文件时,手动指定公钥
ssh username@ip -p 端口号(默认22) -i 公钥文件

vscode升级无法连接

VScode自动更新发现连不上远程服务器了(之前配置好的使用密钥免密登录),

报错:ssh remote /vscode配置远程连接失败:过程试图写入的管道不存在

解决方案就是把本地的known_hosts的原服务器信息全部删掉(根据IP地址删除),然后重新连接就可以了。known_hosts在C:_name.ssh路径下,和你的配置文件、密钥在一起。

另外,如果是linux系统,你的.ssh文件夹权限也很重要,多了也不行!因为sshd为了安全,对属主的目录和文件权限有所要求。如果权限不对,则ssh的免密码登陆不生效。

用户目录权限为 755 或者 700,就是不能是77x、777,需要保障other用户不能有w权限

.ssh目录权限一般为755或者700

rsa_id.pub 及authorized_keys权限一般为644

rsa_id权限必须为600

ssh自动断开

SSH连接总是隔一段时间没有输入时就断开,解决办法有两个,一个是修改服务端配置,另一个是修改客户端配置

服务端修改配置/etc/ssh/sshd_config如下,再systemctl restart sshd

ClientAliveInterval 60     #服务端主动向客户端请求响应的间隔
ClientAliveCountMax 10 #服务器发出请求后客户端没有响应的次数达到一定值就自动断开

客户端修改如下配置~/.ssh/config

TCPKeepAlive=yes
ServerAliveInterval 60 #客户端主动向服务端请求响应的间隔
ServerAliveCountMax 999 #客户端发出请求后服务器没有响应的次数达到一定值就自动断开