这里直接写步骤,下面的有兴趣可以看看

1.进入到.ssh目录下

[root@wangjian /]# cd /root/.ssh/
[root@wangjian .ssh]#

2. 执行生成密钥,所有的参数都可以为空,也就是一直回车确认: ssh-keygen -t rsa

[root@wangjian .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:LbwmYfGVE/RnsDNCmiZO8eyHt+0WoFVfmaI1NI6MqX8 root@wangjian
The key's randomart image is:
+---[RSA 3072]----+
|      .  .+ oo  o|
|       + ++++*.o.|
|      + *o=+Bo=. |
|     o B.+o+ =.  |
|      +.So+.     |
|     . .o= o.    |
|      . o..E..   |
|       o  ...    |
|           ..    |
+----[SHA256]-----+
[root@wangjian .ssh]#

3. 查看生产的文件

[root@wangjian .ssh]# ll
total 12
-rw-------. 1 root root 2602 Jun 29 21:38 id_rsa
-rw-r--r--. 1 root root  567 Jun 29 21:38 id_rsa.pub
-rw-r--r--. 1 root root  525 Jun 21 18:23 known_hosts
[root@wangjian .ssh]#

4.如果没有authorized_keys ,就新建,这里可以看到我没有这个文件.

touch authorized_keys

[root@wangjian .ssh]# touch authorized_keys
[root@wangjian .ssh]# ll
total 12
-rw-r--r--. 1 root root    0 Jun 29 21:41 authorized_keys
-rw-------. 1 root root 2602 Jun 29 21:38 id_rsa
-rw-r--r--. 1 root root  567 Jun 29 21:38 id_rsa.pub
-rw-r--r--. 1 root root  525 Jun 21 18:23 known_hosts
[root@wangjian .ssh]#

5.设置权限   chmod 600 authorized_keys

[root@wangjian .ssh]# chmod 600 authorized_keys
[root@wangjian .ssh]# ll
total 12
-rw-------. 1 root root    0 Jun 29 21:41 authorized_keys
-rw-------. 1 root root 2602 Jun 29 21:38 id_rsa
-rw-r--r--. 1 root root  567 Jun 29 21:38 id_rsa.pub
-rw-r--r--. 1 root root  525 Jun 21 18:23 known_hosts
[root@wangjian .ssh]#

6.复制公钥到需要免登陆的服务器 scp id_rsa.pub wangjianali:/root/.ssh/

复制时还是需要输入密码的

[root@wangjian .ssh]# scp id_rsa.pub wangjianali:/root/.ssh/
The authenticity of host 'wangjianali (101.37.18.102)' can't be established.
ECDSA key fingerprint is SHA256:k+24IDtR7DCnFjWo1R9+lZpC+m3WK+NBDFZjXpa0YgM.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'wangjianali,101.37.18.102' (ECDSA) to the list of known hosts.
root@wangjianali's password:
id_rsa.pub                                                                                                              100%  567    26.8KB/s   00:00
[root@wangjian .ssh]#

7.将客户端公钥追加到服务端的authorized_key文件中,完成公钥认证操作,如果服务端没有authorized_key,执行4,5步

cat id_rsa.pub >> authorized_keys(这里需要注意,id_rsa.pub一定要是自己复制过来的文件,不要和自身的id_rsa.pu混淆)

[root@wangjianali .ssh]# cat id_rsa.pub >> authorized_keys
[root@wangjianali .ssh]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCZdQHmP/1pKJwpANEdoDdVkpi7wV7jdlsto3h/jsUHsaX0t5pFDoFLKmUz9XaxgWqQhR8Rvvh9w9tXujxSoRlXea8rI7HhelYysgKxu7OkrYYbMpXUQtQU5fHSR+iPEX6geRQDTAvh78O+o/vYFrvOiO9oQQOpxfaZfBFiiSCW/o5cRmqSiQY39sKiI1kHeFn+CcxcCjZxvQwTU9oFV08ySRel1QNB3bPwcXN0+d4x7FnCiU26AeMcO8GjF9mEfc513cMv3L/Wba0ZNxPxUBcTmsm5k/3Z6IXtIQmiquifjXT42fAsqQp8P8DKTkkVWsS96kjBL6DmSFSYvSPM3zPlRziLeaj+0hu+6Bsu6HQqt47y/efB/+/if+taA6XPEcw3DKKIndxAUzHJoCQAL+hquUnuuS+2HEMjsbBjCUPLEpk/Is8tdqA0wtlWkO4RHNGZsjMx3ZO5EN5NkczNP8ALHE9kpUMK030keEaKJpka5piRseMc+lY2TY0uLNdclIE= root@wangjian

8.测试 ssh wangjianali

[root@wangjian .ssh]# ssh wangjianaliWelcome to Alibaba Cloud Elastic Compute Service !Activate the web console with: systemctl enable --now cockpit.socketLast login: Mon Jun 29 21:43:27 2020 from 27.17.178.28
[root@wangjianali ~]#

可以看到这里已经不需要密码,就直接连接到wangjianali这个服务器了

我没有在意authorized_keys文件的权限,导致最后还是需要密码,这里大家一定要注意下

scp 传输文件

scp(secure copy)linux系统下基于ssh登录进行安全的远程文件拷贝的命令。

# 传递文件到远程
scp local_file remote_username@remote_ip:remote_file
# 传递文件夹到远程
scp -r local_folder remote_username@remote_ip:remote_folder
# 复制远程文件到本地,只是调换下文件参数位置即可
scp remote_username@remote_ip:remote_file local_file

scp相似的命令是cp,但是cp只能本机拷贝而不能跨服务器,因此需要与ssh合作构成scp命令。

我们直接使用scp来跨机器拷贝文件,会提示输入密码:

# 提示输入server端服务器的wangjianali用户密码
[root@wangjiantencent ~]# ls
authorized_keys  logs  store
[root@wangjiantencent ~]# scp store/ wangjianali:~/
root@wangjianali's password:

原因就在于,scp是先使用ssh连接服务端机器后,再使用网络来执行远程拷贝(cp)

可以参考ssh的过程:

# 同样的提示输入server端服务器的work用户密码
[root@wangjiantencent ~]# ssh wangjianali
root@wangjianali's password:

SSH免密登录

我们都知道如何使用ssh登录远程服务器了,但是每次登录都要输入密码,比较麻烦。ssh提供一种免密登录的方式:公钥登录.

  1. 在客户端使用ssh-keygen生成一对密钥:公钥+私钥
  2. 将客户端公钥追加到服务端的authorized_key文件中,完成公钥认证操作
  3. 认证完成后,客户端向服务端发起登录请求,并传递公钥到服务端
  4. 服务端检索authorized_key文件,确认该公钥是否存在
  5. 如果存在该公钥,则生成随机数R,并用公钥来进行加密,生成公钥加密字符串pubKey(R)
  6. 将公钥加密字符串传递给客户端
  7. 客户端使用私钥解密公钥加密字符串,得到R
  8. 服务端和客户端通信时会产生一个会话ID(sessionKey),用MD5R和SessionKey进行加密,生成摘要(即MD5加密字符串)
  9. 客户端将生成的MD5加密字符串传给服务端
  10. 服务端同样生成MD5(R,SessionKey)加密字符串
  11. 如果客户端传来的加密字符串等于服务端自身生成的加密字符串,则认证成功
  12. 此时不用输入密码,即完成建连,可以开始远程执行shell命令

实现免密登录

ssh-genkey是生成密钥的工具,执行完成后生成公钥和密钥,这两个文件会默认保存在~/.ssh/路径下。常用的参数为:

  • -t: 指定生成密钥类型(rsa、dsa)。默认为rsa
  • -f: 指定存放私钥的文件,公钥文件名为私钥文件名加.pub后缀。默认为id_rsa
  • -P: 指定passphrase(私钥的密码),用于确保私钥的安全。默认为空
  • -C: 备注。默认为user@hostname

我们直接执行来生成密钥,所有的参数都可以为空,也就是一直回车确认:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/work/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
74:17:74:38:b2:c7:70:fd:1d:33:eb:e2:71:71:cc:11 work@client.com

此时,生成的文件在~/.ssh/目录下,我们会看到这些文件:

id_rsa    // 私钥文件
id_rsa.pub    // 公钥文件
authorized_keys    // 存放客户端公钥的文件
known_hosts    // 确认过公钥指纹的可信服务器列表的文件
config    // 指定不同域名使用哪个密钥的配置文件

因为一台机器即能是客户端,又能是服务端,因此同时存在authorized_keys(在该机器为服务端时使用)和Known_hosts(在该机器为客户端时使用)。

我们的服务器会有很多的用户,如果所有的用户都用同一份密钥,可能就没办法划分权限或者区分用户,如多个用户提交git就需要按照用户名来生成密钥,用于区分用户。同时你可能也希望针对不同的服务器使用不同的密钥对,因此需要config配置文件来配置针对不同服务器的配置:

$vim ~/.ssh/config
Host a.baidu.com
User work
IdentityFile ~/.ssh/id_rsaHost b.baidu.com
User zhaoshuaiqiang
IdentityFile ~/.ssh/zhaoshuaiqiang

这样在连接不同的服务器时,就会使用不同的密钥文件来登录。

在客户端生成密钥对之后,将公钥追加到服务器的authorized_keys文件中即可。

 ...15 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAn30bjwtkLW82vTlLMQnI/a42J2g7o+HBCpSzBgNG+xfZuSNQOAU8+FNKQvriT4AL7ToiTtrZDLOEGqyQzaxQejuNnWG6aQ9ETh96qXhVLecWidaBieFGuv+FuXz6x551xtFXx64AzG+706dhnv1nOACYlrnfvXhi5kZzWzprET+CxMIeYhJQwwc19pF5zCWeU9QUvd1mOu0n8JVycevmuXRdVx9WpXq2+aaaaaaaa3uYGMBxvSLtT40O1AiEZ+k9EeYCnTEVtnGoVWCyxpwv6rR/GDOtJL/d+/Wb6I0HEKxxe087yZz8GWpQN5TEIAjq3oEjI/aiGw== work@a.baidu.com16 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzRmK+CAVLnryXqQwweu8Yji8bGAvqzf8PSDzYn1nmE6ZeDkBbrWvFlVZ2yOip3IX8RjvuPc28mTCr0LsIOOmpvET0SzOkt0hzLBPiyCN/QvbKU/RbUv8v5y2hEAlbUkMEzv7qOHQEruGEvA5y99gf/nYjK5OFKVpmg838OScUV3i88Xbqk8rtcuRZHWuZLnuB5spBsEE5r1UrnH/Ik7frZr8Vb4X6aZWbAp1yc0SqZ8JXVbmOiakqq0WqkLm+zqhEwr+Ooh2guH23x9zjMqYUy+aaaaaBEBC+LepCvskArBt/SRwJDJkcItz8T7kBC3CP0Y0X4hB+6k6/yM/pup5w== work@b.baidu.com

此时,即可免密登录服务器。

私钥的安全性

假设你已经实现了服务器集群的免密登录,那么如果你的一台客户端被攻击成功了,那么整个集群的安全性便荡然无存了。因此,我们有时还需要对密钥做安全性保障,即设置私钥密码:

// 使用rsa方法加密,生成test密钥对,私钥密码为123456
ssh-keygen -t rsa -f test -P 123456 

此时,各机器仍然是免密登录,但是需要你输入私钥密码:

$ssh work@a.baidu.com
Enter passphrase for key '/home/work/.ssh/test': 

linux上怎么实现ssh免密登录相关推荐

  1. linux上如何设置ssh免密登陆

    一.linux上ssh链接 1.功能说明 scp就是security copy,用于将文件或者目录从一个Linux系统拷贝到另一个Linux系统下.scp传输数据用的是SSH协议,保证了数据传输的安全 ...

  2. linux上ssh免密登录原理及实现

    因为我的服务器集群需要回收日志到中央进行统一处理,所以需要建立ssh互信关系实现免密登录.关于ssh的使用大家可能都很熟悉了,我们今天主要来讲下ssh连接和免密登录的原理. scp 传输文件 scp( ...

  3. ssh免密登录linux服务器

    Ssh免密登录 sshd服务 sshd简介: SSH 密钥为登录 Linux 服务器提供了更好且安全的机制.运行 ssh-keygen 后,将会生成公私密钥对.你可以将公钥放置到任意服务器,从持有私钥 ...

  4. Linux运维:Shell脚本实现ssh免密登录远程服务器

    LInux系统日常运维过程中,经常需要在本地运行脚本执行对远程主机的命令,正常情况下,ssh登录远程服务器时会提示输入密码,这会影响到脚本的自动执行(因为shell脚本中没有自动填充密码的命令).有三 ...

  5. 20210829-基于CentOS7/Linux配置ssh免密登录

    #关键字:Linux,CentOS7,ssh 登录,免密登录 目录 一.目标: 二.环境说明: 三.配置步骤: 一.目标: 1. 从一台机器使用 'shh 主机名'命令登录另一台机器时不用输入密码. ...

  6. Linux SSH 免密登录

    Linux SSH 免密登录 本篇我们来 看看 Linux 的免密登录的原理 以及实际操作一番 概述 什么是 Linux SSH 免密登录,我觉得大家应该都 多少听过 或者操作过,那你真的理解整个免密 ...

  7. 本地mac配置ssh免密登录远程linux服务器

    本地mac配置ssh免密登录远程linux服务器 每次输入密码登录服务器也就罢了,结果scp时每次都要输入密码,分分秒秒阿西吧.哈哈哈,回归正题,配置免密登录后,畅通无阻啊,哈哈哈 检查自己~/.ss ...

  8. linux中ssh免密登录,Linux之SSH免密登录

    Linux 双向 SSH 免密登录 原理 双向,顾名思义,双方互通,此处的意思是多台 linux 两两免密登录.双向比单向多了些操作,单向只需把某一个linux的公钥发送给其他linux即可,而双向要 ...

  9. 关于设置不同linux主机之间ssh免密登录简易方法

    2019独角兽企业重金招聘Python工程师标准>>> 在linux日常中,经常会有ssh链接其他主机服务器的action,也学习过大家日常用配置ssh免密登录的方法. 小编今天在这 ...

最新文章

  1. oracle加as报错,【Oracle】-【sqlplus / as sysdba登录报错问题】-新用
  2. 关于RasASM的一个编译错误
  3. VSCode 报错 Parsing error: x-invalid-end-tag
  4. 免费生成https证书以及配置
  5. poi生成word不可以修改_操作不懂技术就可以做小程序无限生成平台的创业项目实操教程...
  6. 10亿级!淘宝大规模图像检索引擎算法设计概览
  7. 从HDFS的写入和读取中,我发现了点东西
  8. 管理Shader——Shader概览
  9. 春节档电影评分出炉:韩寒《四海》垫底仅有 5.6 分,他居然第一
  10. 迷你星域冒险服务器维护中,迷你世界星域冒险
  11. 腾讯云技术复盘「数据丢失事件」,为什么业务上云还要再做云备份?
  12. rest接口webservice接口利用http请求方式发送数据
  13. VS2022 Setup Project 打包
  14. 潘悟云方言计算机,山东方言精组与见晓组声母的分合研究
  15. 每日加瓦,终成栋房3
  16. order finding before shor's algorithm
  17. Python数据分析中数据预处理:编码将文字型数据转换为数值型
  18. Snowboy 声音识别
  19. GitLab分支合并时,选择use ours是指分支而不是主分支
  20. Airship起航,1.0发布

热门文章

  1. E0 S0 SVL接口配置
  2. 点击图片播放音乐实现
  3. Win32应用程序开发:完整的开发流程
  4. 搜索引擎优化的一般内容应包括什么
  5. Mac系统空格预览放大图片
  6. iPhone 无法更新软件
  7. 平面设计常用计算机工具,终于明白平面设计常用硬件设备
  8. Catagory用法
  9. 第十三届蓝桥杯大赛软件赛决赛(Java 大学C组)
  10. excel批量制作条形码_如何在Microsoft Excel中制作条形图