最近又在捣腾捣腾自己的博客,作死的将阿里云磁盘重置了一下。需要重新配置一个SSH登陆的秘钥,发现忘了该怎么开始,这里整理下一些日常用的SSH相关姿势==。

SSH是什么

SSH (Secure Shell) 简单来说就是一种用于计算机之间加密登陆的网络协议。使用SSH协议登陆到另外一台计算机,能有效的保证远程管理过程中的数据安全。

SSH免密登陆

生成RSA秘钥对

SSH相关的秘钥一般都存放在~/.ssh目录下面。如果你和我一样~/.ssh目录存在以下的两个文件:

  • id_rsa
  • id_rsa.pub

这就说明RSA秘钥对已经有个这个步骤你可以直接跳过。如果没有,继续。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxxx/.ssh/id_rsa):  # 回车即可
# 如果没有~/.ssh目录 这里会显示Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): # 输入秘钥密码或回车(如果设置密码以后每次使用私钥都需要输入该密码)
Enter same passphrase again: # 和上一步相同,输入秘钥密码或回车。
Your identification has been saved in /root/.ssh/id_rsa. # 私钥文件
Your public key has been saved in /root/.ssh/id_rsa.pub. # 公钥文件
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxx xxx@xxx.local
The key's randomart image is:
+---[RSA 2048]----+
|      .....      |
+----[SHA256]-----+

到这里,秘钥对已经生成。

在服务器安装授权秘钥

1.根据公钥生成授权秘钥。

$ cat ~/.ssh/id_rsa.pub >> authorized_keys

2.上传授权秘钥到服务器。

$ scp authorized_keys root@razeen.me:~ 
root@razeen.me's password:
authorized_keys             100%  748    21.5KB/s   00:00
  1. 登陆服务器,配置authorized_keys。
$ ssh root@razeen.me
root@razeen.me's password:

# 登陆上去后 我们可以看到刚刚上传的文件
[root@xxxx ~]$ ls
authorized_keys

# 新建 ~/.ssh目录,将authorized_keys放到该目录下。
[root@xxxx ~]$ mkdir .ssh
[root@xxxx ~]$ mv authorized_keys .ssh/

# 给秘钥授权
[root@xxxx ~]$ chmod 600 .ssh/authorized_keys
[root@xxxx ~]$ chmod 700 .ssh/

4.设置SSH,打开密钥登录功能。

相关的SSH设置,在/etc/ssh/sshd_config文件内。

[root@xxxx ~]$vi /etc/ssh/sshd_config

# 将下面两行放出
RSAAuthentication yes  # Centos8中过时
PubkeyAuthentication yes

# 如果你和我一样 不想用密码登陆 将这一行改为no
PasswordAuthentication no

修改完后,保存文件,重启SSH服务。

[root@xxxx ~]$ service sshd restart

最后,验证一下。如果和我一样直接登陆成功,恭喜你免密登陆成功了。

$ ssh root@razeen.me
Last login: Tue Sep 26 21:05:48 2017 from 218.82.26.206

Welcome to aliyun Elastic Compute Service!

[root@xxxx ~]#

修改SSH端口

修改SSH配置文件

我们常用的SSH端口是22,为了提高安全性,你可以将其修改到一个不常用的端口。

同样是修改/etc/ssh/sshd_config文件。 我们能看到

$ vi /etc/ssh/sshd_config

#
#Port 22   
#ListenAddress 0.0.0.0
#ListenAddress ::

# 例如 修改后
Port 54321

将Port注释删掉,修改22为你想要的端口号,注意不要与常用的端口后冲突。

然后重启SSH服务。

$ service sshd restart

CentOS8 在你执行上面命令启动会报错,需要申明端口类型。

semanage port -a -t ssh_port_t -p tcp 54321

放行端口

当然这还不够,还需放行刚刚修改的SSH端口。

修改安全组

我用的阿里云只需要在在安全组规则中的公网入网方向添加该端口范围即可,如下图所示:

iptable 放行

如果你用的其他的也许还需修改iptable. 操作如下:

vi /etc/sysconfig/iptables

# 默认如下:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# 修改22为你的SSH端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 54321 -j ACCEPT
firewall 放行

如果你是Centos8, 开启了firewall,那可能需要修改firewall。

# 放行端口
firewall-cmd --zone=public --add-port=54321/tcp --permanent 
# 重启
firewall-cmd --reload

到这里,端口就愉快的修改完成了。 你可以这么登陆ssh -P 54321 root@xxx,如果你还觉得麻烦,下面还有更简单的方法。

SSH相关技巧

别名登陆

你还在为每次SSH, 要输入长长的用户名而烦恼吗?

你还在为每次SSH, 要带这长长的参数而烦恼吗?

你还在为每次SCP, 依然要带这长长的参数而烦恼吗?

你还在犹豫什么, 别名登陆给你解决烦恼。

首先你需要在你的~/.ssh目录下添加文件名为config的文件,文件内容如下:

# config
Host razeen                      # 别名
    HostName razeen.me           # 主机地址 (可以是IP)
    User root                    # 用户名
    Port 54321                   # ssh端口
    # IdentityFile ~/.ssh/id_rsa # 认证文件

接下来你直接使用$ ssh razeen就可以登陆服务器了,使用scp file.xxx razeen:/xxx/xxx就可你将本地的file.xxx文件拷到服务器/xxx/xxx目录下, 是不是方便了很多。

参考

[1] https://deepzz.com/post/how-to-setup-ssh-config.html#toc_4