什么是ssh
SSH全称(Secure SHell)是一种网络协议,顾名思义就是非常安全的shell,主要用于计算机间加密传输。早期,互联网通信都是基于明文通信,一旦被截获,内容就暴露无遗。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。SSH的主要目的是用来取代传统的telnet 和 R 系列命令(rlogin, rsh, rexec 等)远程登录和远程执行命令的工具,实现对远程登录和远程执行命令加密,防止由于网络监听而密码泄露问题。
利用ssh免密码登录服务器
平时如果我们要登录服务器可能会这样
ssh username@host
password:
而且一般的服务器密码都是很繁琐冗长的,我们一天可能要登录很多次服务器,很明显这样是十分低效且麻烦的。我们可以通过在本地和服务器做ssh的相应配置,实现免密码登录服务器.
生成公钥
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell。
执行
ssh-keygen
命令, 期间会询问生成公钥的地址,如果是一路回车,那么默认都是在~/.ssh目录下生成
id_rsa,和id_rsa.pub这两个文件,其中id_rsa.pub是默认的公钥,而id_rsa是私钥。
.ssh目录是SSH为主机上每个用户分别建立的一个目录,用来存放用户层面的配置信息的。
服务器配置(centos7)
修改ssh的默认配置文件
vi /etc/ssh/sshd_config
将如下配置前的#号去掉
#禁用root账户登录,如果是用root用户登录请开启
PermitRootLogin yes
# 是否让 sshd 去检查用户家目录或相关档案的权限数据,
# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
StrictModes no
# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 有了证书登录了,可以选择禁用密码登录
PasswordAuthentication no
拷贝公钥到服务器的authorized_keys文件下
$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
启动ssh服务
service sshd start
如果提示
Redirecting to /bin/systemctl start sshd.service
执行如下命令即可
/bin/systemctl start sshd.service
注意
1.这里有几个问题可能要注意一下
在centos7系统一下可能在服务器上要先手动安装OpenSSH
yum install openssh-server
OpenSSH Server安装完成后在/etc/init.d目录下应该会增加一个名为sshd的服务
启动sshd服务
/etc/init.d/sshd start
2.如果有本地有多个公钥
可以在~/.ssh目录下新建名字为config的文件
Host XXX
HostName 000.000.000.000
User suoper
IdentityFile ~/.ssh/id_rsa
其中的Host可以自己随便命名,但是HostName要对应你服务器的IP。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。