前提:

  1. 秘钥的生成需要OpenSSL的支持, 需要自行进行安装

一. 新建用户

  在root登陆状态中执行命令:

useradd -m ssh-user  # centos
adduser ssh-user # ubuntu passwd ssh-user // 设置ssh-user密码

  切换到ssh-user 用户:

su ssh-user  

  追加用户组:

sudo usermod -a -G sudo xxx
# 将xxx用户加入到sudo组中,具有超级管理员权限

二. 创建.ssh目录并生成秘钥对

  创建.ssh目录:

mkdir /home/ssh-user/.ssh

  生成秘钥对:

ssh-keygen -t rsa -b 4096

参数说明:

usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]

                  [-N new_passphrase] [-C comment] [-f output_keyfile]

       ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

       ssh-keygen -i [-m key_format] [-f input_keyfile] 读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥

       ssh-keygen -e [-m key_format] [-f input_keyfile] 读取openssh的私钥或者公钥文件

       ssh-keygen -y [-f input_keyfile]

       ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
          -C 添加注释 ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile] 显示公钥文件的指纹数据 ssh-keygen -B [-f input_keyfile] ssh-keygen -D pkcs11 ssh-keygen -F hostname [-f known_hosts_file] [-l] ssh-keygen -H [-f known_hosts_file] ssh-keygen -R hostname [-f known_hosts_file] ssh-keygen -r hostname [-f input_keyfile] [-g] ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point] ssh-keygen -T output_file -f input_file [-v] [-a rounds] [-J num_lines] [-j start_line] [-K checkpt] [-W generator] ssh-keygen -s ca_key -I certificate_identity [-h] [-n principals] [-O option] [-V validity_interval] [-z serial_number] file ... ssh-keygen -L [-f input_keyfile] ssh-keygen -A ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number] file ... ssh-keygen -Q -f krl_file file ...

  生成成功之后 ,会在该目录下有两个文件: id_rsa(私钥), id_rsa.pub(公钥)

  目录下新建文件authorized_keys:

touch authorized_keys

  将公钥追加到authorized.key文件中:

cat id_rsa.pub >> authorized_keys

  设置目录权限:

chmod 700 /home/ssh-user/.ssh

  设置文件权限:

chmod 600 /home/ssh-user/.ssh/authorized_keys

  将私钥下发到本地或需要进行登陆的远端服务器上:

    可以使用FTP链接下载或者scp等命令传输过去即可.

scp -P 8932 -i user1/.ssh/id_rsa  user2/.ssh/authorized_keys user1@172.160.114.147:/home/user2

三. 远程登录(秘钥对)

  远程登录命令:

ssh  -i ./id_rsa  ssh-user@47.99.180.120  

参数说明:

usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]

           [-D [bind_address:]port] [-E log_file] [-e escape_char]

           [-F configfile] [-I pkcs11] [-i identity_file]

           [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]

           [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]

           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]

           [user@]hostname [command]

四. 禁止密码登陆

  编辑文件/etc/ssh/sshd_config

 AuthorizedKeysFile   .ssh/authorized_keys   //公钥公钥认证文件

 PubkeyAuthentication yes   //可以使用公钥登录

 PasswordAuthentication no  //不允许使用密码登录

五. 重启sshd服务

  1) centos

service sshd restart

systemctl restart sshd.service

  2)ubuntu

# 启动
/etc/init.d/ssh start # 重启
/etc/init.d/ssh restart

其他:

  l 使用配置登录别名,进行登陆(在需要进行登陆的服务器上)

vim  ~/.ssh/config

Host            ssh-user             # 别名

HostName        aslong.xin         # 域名或ip

Port            22                 # 端口

User            dev                # 登录名

IdentityFile    ~/.ssh/id_rsa      # 本机私钥存放位置

命令:

ssh  ssh-user 

  2. 使用ssh-copy-id实现免密登陆

    1) 在本地机器上使用ssh-keygen产生公钥私钥对

ssh-keygen -t 加密方式 

    2)用ssh-copy-id将公钥复制到远程机器中

$  ssh-copy-id -i .ssh/id_rsa.pub  用户名字@192.168.x.xxx

注意: ssh-copy-id 将key写到远程机器的 ~/ .ssh/authorized_keys 文件中

    3)登录到远程机器不用输入密码

$  ssh 用户名字@192.168.x.xxx

    

 常见问题

  1. Permissions 0644 for ‘/root/.ssh/id_rsa’ are too open

  使用终端进行连接的时候,报错,这是由于权限过大,需要限制其私钥的访问权限

chmod 600 id_rsa

  2. 登录失败WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

解决方案:

    修改~/.ssh/known_hosts  这该需要登录的ip的相关信息删除掉即可

  

  3.设置密钥登录成功之后, 但是登录的时候还是会提示输入密码,试了好久, 最终找到了问题

我是使用的root权限,也是给root用户添加的密钥, 但是根目录下/root 的所属用户组却是www,于是修改

chown root.root  root

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

即可正常使用,  若遇到此问题不知如何下手的时候,可以查看日志文件

tail  /var/log/secure -n 20

发现问题的所在:Authentication refused: bad ownership or modes for file

从字面上可以看出是目录的属主和权限配置不当,查找资料得知:SSH不希望home目录和~/.ssh目录对组有写权限

  4. 在Windows下无法使用ssh-copy-id命令

cat .\id_rsa.pub | ssh 登录用户@IP地址 "cat >> ~/.ssh/authorized_keys"

ssh之秘钥登陆的更多相关文章

  1. 服务器做ssh免秘钥登陆

    集群内服务器做非root用户免秘钥登陆:1.node1新建用户abc1,制作公钥.私钥(一路回车键即可)ssh-keygen –t rsa将自动在/home/abc1/.ssh/目录下创建公私钥文件如 ...

  2. ssh免秘钥登陆实现

    1.用处 搭建集群或者工作中登陆跳板机经常需要做免秘钥互相登陆彼此服务器. 2. 准备工作   假设A主机10.20.0.1想通过ssh登录到B主机10.20.0.2上.   那么客户端(A主机)需要 ...

  3. Centos7 配置ssh 免秘钥登陆

    1.yum install -y openssh 2.servier1: ssh-keygen -t rsa #有提示的直接enter 3.server 2: ssh-keygen -t rsa # ...

  4. linux下ssh key秘钥登陆远程服务器设置

    本地的用户名需要和ssh服务器的用户名一致 1.在Server服务器上加载私钥文件ssh-add wang_rsa 2.如果系统提示:could not open a connection to yo ...

  5. 配置ssh秘钥登陆

    环境2台linux服务器:node1 192.168.X.234                               node2 192.168.X.242 演示用node1无密码登陆node ...

  6. linux下ssh免秘钥登录

    1.检查防火墙是否关闭 (1)切换到root用户 (2)查看防火墙状态 service iptables status 这是没有关闭 (3)设置关闭 service iptables stop 2.检 ...

  7. ssh 多秘钥管理和坑

    概述 很久之前就想研究一下 ssh 的多秘钥管理,今天正好有时间就研究了一下,挺简单的,记录下来,供以后开发时参考,相信对其他人也有用. 参考资料: Git - 生成 SSH公钥 , Linux 下多 ...

  8. ssh分发秘钥时出现错误“Permission denied (publickey,gssapi-keyex,gssapi-with-mic)”

    因为公司的服务器连接是通过xshell公钥和密码连接的,今天在ssh分发秘钥的时候出现了,下面的错误: [root@iZ2ze97cumk8opqm28h8Z .ssh]# ssh-copy-id - ...

  9. Linux SSH 免秘钥登录

    SSH 免秘钥登录 ssh:是一种安全加密协议 ssh  username@hostname     ssh gongziyuan.com:以当前用户登录该机器(如果不是当前用户,需要这么干:ssh ...

  10. ansible-playbook 打通ssh无秘钥

    建议参考: http://www.cnblogs.com/jackchen001/p/6514018.html 这个代码清晰,效果佳! 参考链接: http://www.cnblogs.com/cao ...

随机推荐

  1. 同步多个mysql 到一个

    了解大概 Ref: is it possible that canal set with multiple mysql database source 使用 canal https://dev.mys ...

  2. sicp每日一题[1.40]

    Exercise 1.40 Define a procedure cubic that can be used together with the newtons-method procedure i ...

  3. Angular 18+ 高级教程 – HttpClient

    前言 HttpClient 是 Angular 对 XMLHttpRequest 和 Fetch 的封装. HttpClient 的 DX (Developer Experience) 比 XMLHt ...

  4. 游览器 reflow

    refer: https://juejin.im/post/5a9372895188257a6b06132e reflow 伤性能. 所以要闪. 有几个频密触发的东西要留意. 1. scroll 2. ...

  5. 全面掌握 Jest:从零开始的测试指南(上篇)

    随着JavaScript在前后端开发中的广泛应用,测试已成为保证代码质量的关键环节. 为什么需要单元测试 在我们的开发过程中,经常需要定义一些算法函数,例如将接口返回的数据转换成UI组件所需的格式.为 ...

  6. IDEA 换了电脑,如何导入和导出配置?

    前言 我们在使用IDEA开发时,经常会设置各种各样的配置,时间一长,就会有很多个性化的东西.用起来也越来越顺手.   不过这里可能会有个问题,那就是哪一天我们要换个电脑了,或者想安装新版本的IDEA时 ...

  7. Linux下挂载SD卡,以及容易犯的误区

    1.插入SD卡 如果系统能够识别SD卡,则会打印一些信息: 2.查看系统给SD卡分配的设备名 命令如下: fdisk -l 说明:通常是根据SD卡的存储容量来确定的. 比如下面的信息: 3.挂载SD卡 ...

  8. /proc/zoneinfo

    root@pita2_mr813_tina35:/# cat /proc/zoneinfo Node 0, zone DMA per-node stats nr_inactive_anon 4749 ...

  9. 00 通过 Pytorch 实现 Transformer 框架完整代码

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  10. day08-数据类型拓展及面试题

    数据类型拓展及面试题 整数拓展----进制   //整数拓展----进制         int i=10;//十进制   不能以0开头,0~9         int i1=0b11;//二进制:0 ...