CentOS远程登陆SSH配置

前言

  最近抛弃了原来的VPN,转而购买了VPS,配置也挺简单,已经提供了在浏览器上提供shell入口的方式,但是还是想简单记录下关于SSH远程登陆的流程(毕竟还是要打开浏览器,没终端方便,而且速度也慢),虽然网上这方面的博客很多,但是纸上得来终觉浅,还是想自己动手记录一下。   

环境

CentOS release 6.6 (Final)
macOS Sierra 10.12.3

流程

  在Google上查找CentOSssh配置方法,经过一番搜索与比较,还是官方的wiki更好一些

  文档中有14870798741407

提示我们不要用root账户远程ssh登陆,因此需要创建用户

创建新用户

创建新用户的指令为adduser,先看看adduser指令的用法

14870802765782

1
$ > adduser --help

创建一个名为Jason的用户

1
$ > adduser -m Jason

为新用户重新设置密码

1
$ > passwd Jason

输入新密码,确认,密码设置成功。关于密码的安全性,正好参考第一步

配置sshd_config文件

然后根据文档操作/etc/ssh/sshd_config文件

  • 禁止root用户SSH登陆 => PermitRootLogin no
  • 允许指定用户使用SSH登陆 => AllowUsers alice bob
  • 使用SSH 2.0 => Protocol 2
  • 修改SSH登陆端口 Port 12345

因为远程服务器环境是CentOS 6.6而且也没有并没有selinux(提示找不到该指令semanage),如果有的话照着操作。

重启sshd服务

1
$ > service sshd restart 

尝试ssh远程登陆

1
$ > ssh -p 指定端口号 用户名@服务器ip
  1. 提示添加远程服务器的指纹信息
  2. 输入密码
  3. 成功登陆远程主机

进一步配置

  上面那些都应该没有问题,但是每次登陆都要输入密码,略麻烦,用证书认证的方式去替代密码。
  
  在远程服务器的/etc/ssh/sshd_config  
  

By default, ssh will first try to authenticate using keys. If no keys are found or authentication fails, then ssh will fall back to conventional password authentication.

会优先选择证书认证的方式

照着文档进行操作吧

在客户端(macOS)上生成钥匙对(公钥 & 私钥)

1
$ > ssh-keygen -t rsa

我将证书命名为id_vps,指令操作后会生成id_vpsid_vps.pub,分别代表着私钥和公钥

密码留空,如果不留空,后面ssh还是要输入证书的密码

修改私钥的权限为仅所有者可读可写

1
$ > chmod 600 id_vps

需要复制公钥到服务器然后写入到~/.ssh/authorized_keys

使用SSH*远程登陆到服务器,发现家目录中还没有.ssh目录,使用mkdir*创建

1
$ > mkdir .ssh

发送公钥

1
$ > scp -P 端口号 ./id_vps.pub  Jason@服务器ip:/home/Jason/.ssh 

在远程服务器上使用ls,确定公钥已经发送成功了

将公钥追加写入~/.ssh/authorized_keys中,若authorized_keys不存在,则会创建并写入

1
$ > cat id_vps.pub >> ~/.ssh/authorized_keys

同样修改authorized_keys的权限为600,并删除公钥文件,结果如下

ssh-copy-id可以更方便一些

添加用户到sudoers

此时使用SSH*远程登陆,还是不行的,因为在/etc/ssh/sshd_config配置文件中,还是使用密码方式进行认证的,为了能修改/etc/ssh/sshd_config同时为了以后操作的能方便些,将Jason添加到/etc/sudoers*中

以下摘自CentOS下添加sudo用户
  在使用sudo的时候,如果出现”xxx is not in the sudoers file. This incident will be reported”说明当前用户名:xxx是没有权限使用sudo的,这个时候我们就需要修改/etc/sudoers来为当前用户xxx添加sudo权限。
  使用 “su –” 命令,进入超级用户,进入etc目录 “cd /etc”
  为sudoers文件添加写入的权限:使用命令 “chmod u+w sudoers”
  使用命令“vim sudoers”,按“i”进入编辑模式后,找到“rootALL=(ALL) ALL ”,在后面添加:”xxxALL=(ALL) ALL”(这里的xxx是你的用户名),再按一下“Esc”键退出编辑,输入“wq”(write quit)后,退出sudoers。
  输入“chmod u-w(v) sudoers”将文件的写入属性撤销
  通过“su xxx”切换回自己的用户名,再使用sudo命令时,就可以使用了

/etc/ssh/ssh_config将密码认证方式的yes修改为no

SSH登陆

远程登陆

报错

1
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

应该是证书的问题,但是感觉操作都没问题,与官方的步骤不同的是证书的名称

ssh*加上-v*参数打印出详细过程

1
$ > ssh -vp xxx Jason@服务器ip

如果我不指定,默认找~/.ssh/id_rsa所以肯定会失败

加上-i参数

1
$ > ssh -vp xxx -i ~/Jason/.ssh/id_vps Jason@服务器ip

登陆成功

原理

SSH为什么安全?

公钥加密

根据SSH原理与运用(一):远程登录

整个过程是这样的:
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

中间人攻击

伪造远程主机,根据ssh登陆流程用户会把登陆密码用伪造的远程主机提供的公钥进行加密,密码自然就泄露了

authorized_keys文件有什么用?

在指令sshman手册中有如下语句

The file ~/.ssh/authorized_keys lists the public keys that are permitted for
logging in. When the user logs in, the ssh program tells the server which key
pair it would like to use for authentication. The client proves that it has
access to the private key and the server checks that the corresponding public
key is authorized to accept the account.

  authorized_keys的文件保存着可以登陆的用户的公钥,在ssh登陆时,在经过建立连接,协商加密算法等过程后,客户端会提供私钥由服务器检查是否能匹配相应的公钥(可能是提供一段内容,由客户端私钥加密,然后看服务器的authorized_keys中的公钥能否解开)

参考

喜马拉雅音频文件导出 objc-706工程搭建
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×