前提:

  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. DOM – Web Components

    前言 Web Components 已经听过很多年了, 但在开发中用纯 DOM 来实现还是比较少见的. 通常我们是配搭 Angular, React, Vue, Lit 来使用. 这篇就来讲讲纯 We ...

  2. CSS – display, visibility, opacity, transparent 的区别

    前言 要让一个元素"消失", 有 3 种做法. 它们有一点点的不同. 在实战时要清楚什么时候用什么哦. 例子说明 <div class="abc"> ...

  3. MyBatis——案例——查询-多条件查询(多参数接收的三种方法)

    查询-多条件查询   编写接口方法:Mapper接口       参数:所有条件查询 List<Brand> selectByCondition(int status,String com ...

  4. Dart 2.14 版现已发布

    支持 Apple Silicon,增加了默认的 lint.更好的工具和新的语言功能提高生产力. 本月,我们发布了 Dart SDK 2.14 的正式版,新的版本旨在通过独特的可移植性.生产力和稳健性组 ...

  5. 个人Blog的第一篇博文

    个人Blog的第一篇博文 正式加入"博客园"大家庭了,希望以后可以一直坚持下去欸.

  6. [OI] 数学与推论证明 3(高中数学篇)

    1 \[\color{#40865d}(2) \] \(f(x)=x^{2}-a(x+a\ln x)(a\neq0)\),若 \(f(1)+f'(1)=0\) 且 \(a\gt 0\),问可以得到什么 ...

  7. AE cc 2017 和 2018 中英文切换的方法

    AE cc 2017中文切换英文的方法 找到AE的安装文件目录下的"Support Files"文件夹,路径为 C:\Program Files\Adobe\Adobe After ...

  8. springboot起步依赖

    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...

  9. Linux软中断ksoftirqd

    前言 在上一篇 LINUX软中断-softirq的描述中,提到过ksoftirqd,这篇文章就介绍ksoftirqd ksoftirqd 是什么? ksoftirqd 是个内核线程,在创建的时候是绑定 ...

  10. Linux系统启动速度优化工具systemd-analyze

    systemd-analyze简介 systemd-analyze是Linux自带的分析系统启动性能的工具. systemd-analyze可使用的命令: systemd-analyze [OPTIO ...