ssh密钥登录服务器

Mac配置ssh密钥登录服务器

客户端配置

1.进入ssh目录

  $ cd ~/.ssh

2.SSH客户端 生成密钥(二选一即可,前提是安装了openssh)

  $ ssh-keygen -t rsa
    # 会在密钥中写入邮箱
  $ ssh-keygen -t rsa -C "email@qq.com" 

Enter file in which to save the key (/Users/ailuoy/.ssh/id_rsa): ailuoy_aliyun (这里输入这个密钥的名称)
以下两步可以直接回车
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
完成之后 会在目录下生产两个文件
ailuoy_aliyun (私钥)
ailuoy_aliyun.pub config (公钥) 3.客户端config文件的配置(在ssh文件目录下创建config文件)

    Host ailuoy_aliyun  #别名,域名缩写
    HostName 8.8.8.8  #完整的域名
    Port xxx    #这里登录服务器的端口,如果是默认的22端口,不用写这一行
    User root  #登录该域名使用的账号名
    IdentityFile ~/.ssh/ailuoy_aliyun #私钥文件的路径

查看centos相关类的日志

sudo vim /var/log/secure
.....
# 代表文件夹权限错误
Authentication refused: bad ownership or modes for directory /home/server/.ssh

设置私钥权限600

chmod 600 ailuoy_aliyun

服务器配置

1.进入ssh目录,如果没有authorized_keys文件就新建
2.将ailuoy_aliyun.pub下的内容复制到authorized_keys文件内,如果authorized_keys文件内有密钥,直接换行复制在后面即可
3.必须保证authorized_keys只对其所有者有读写权限,其他人不允许有写的权限,否则SSH是不会工作的。

  $ chmod 644 ~/.ssh/authorized_keys

客户端执行别名登录

  $ ssh ailuoy_aliyun

1.如果出现被拒绝,请给客户端的ailuoy_aliyun权限

  $ chmod 777 ailuoy_aliyun

4.使用以下命令登录服务器

ssh ailuoy_aliyun

关于权限

# chmod 700 .ssh/
drwx------  2 server server 4096 Jul 21 12:12 .ssh
# chmod 644 ~/.ssh/authorized_keys
-rw-r--r-- 1 server server 414 Jul 21 12:12 authorized_keys

配置ssh不断开

当我们ssh连接上服务器之后,空闲一段时间,ssh就会自动断开,很不方便,我们配置下ssh不断开

服务端设置

# 30表示30s给客户端发送一次心跳
ClientAliveInterval 30
# 3此客户端没有返回心跳,则会断开连接
ClientAliveCountMax 3

客户端配置

  • 如果是想让主机所有用户都生效,修改/etc/ssh/ssh_config
  • 如果只想让本人生效,则修改 ~/.ssh/config
Host *
    ServerAliveInterval 30
    ServerAliveCountMax 3

如果此处还有一个配置项叫 SendEnv LANG LC_*,老高建议最好注释掉,否则如果本地是中文环境,而服务器没有对应的中文语言选项时系统可能会出现很多莫名其妙的BUG,所以保持原始英文语言环境为上。

重启服务

service sshd restart

查看是否生效

ssh -o ServerAliveInterval=30 -vvv user@host
# 或者用别名登录
ssh -o ServerAliveInterval=30 -vvv server_ly2

等30s后我们应该可以看到如下字样,说明我们在指定时间发送了心跳给服务器,服务器也有应答。同理如果我们在服务器也打开了心跳,则应该是先收到服务器的心跳然后再应答。

debug3: send packet: type 80
debug3: receive packet: type 82
.....

遇到的问题

Bad owner or permissions on .ssh/config

这个时候,只需要在.ssh目录,执行以下命令行:

sudo chmod 600 config

Failed to restart sshd.service: .....

Failed to restart sshd.service: The name org.freedesktop.PolicyKit1 was not provided by any .service files

sudo apt install policykit-1

解决ssh登录慢的问题

通过关闭 UseDNS和GSSAPIAuthentication选项加速 SSH登录

通常情况下我们在连接 OpenSSH服务器的时候假如 UseDNS选项是打开的话,服务器会先根据客户端的 IP地址进行 DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,并验证是否与原始 IP地址一致,通过此种措施来防止客户端欺骗。平时我们都是动态 IP不会有PTR记录,所以打开此选项也没有太多作用。我们可以通过关闭此功能来提高连接 OpenSSH 服务器的速度。

vim  /etc/ssh/sshd_config

# 修改以下配置
GSSAPIAuthentication no
UseDNS no
# 还有系统默认有个忽略以前登录过主机的记录,将这个打开基本上就会解析登录慢的问题
IgnoreRhosts yes

systemctl restart sshd

ssh root@58.87.xxx.xxx -i ~/.ssh/server -vvv

禁止root登录

sudo vim  /etc/ssh/sshd_config
# 将
PermitRootLogin yes
# 改为
PermitRootLogin no
sudo systemctl restart sshd