引言

------------------
程序员或者服务器运维人员在日常工作中,经常会遇到很多台服务器需要管理的情况,如果服务器多了,一般的做法都是通过一个ssh客户端工具来管理,例如:securityCRT、Xshell、putty等远程工具,这类工具有两个特点:
1.可以将服务器存储成一个列表,配置一次服务器信息之后,下次直接双击就可以使用;
2.可以保存账号密码,端口,ip地址等信息,备注一个简单易记的名字之后,还可以分组管理,实现多台机器的管理;

那么对于linux的使用者或者没有工具的人员,如何使用系统自带的ssh客户端去实现和远程服务器的免密码登陆呢?本文基于Ubuntu18.04系统,自带的命令行ssh客户端测试通过。

一、什么是SSH?
------------------
简单说,SSH是一种网络协议,用于计算机之间的加密登录。

如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。

二、SSH应用的场景
------------------
常见的SSH应用场景有:
1. Git、SVN等CVS(版本控制系统,System Version System)的身份认证,都需要本机生成ssh密钥对,然后和代码仓库进行交换鉴权;
2. 远程连接服务器的时候,需要通过ssh客户端和远程服务器互认;
3. 其他需要计算机之间互相认可时候的场景

三、如何通过ssh keys实现免验证登陆远程服务器(基于Ubuntu18.04)
-----------------

1. 检查自己本地是否已经生成了ssh的密钥对,在~/.ssh下有对应的id_rsa(密钥)、id_rsa.pub(公钥)文件,如果没有,可以通过命令

ssh-keygen

生成,直接回车即可,默认生成在 /home/<username>/.ssh 目录下
确认.ssh存在并且存在公钥、密钥之后进行下一步操作;

2. ssh-copy-id是一个ssh公钥拷贝工具,在很多系统多都有预装,通过命令

ssh-copy-id <username>@<remote_host>

输入密码之后,会提示 # Are you sure you want to continue connecting (yes/no)? # 键入yes回车即可,这里的操作是将ssh的公钥复制到远程服务器的可信名单中,下次通过该认证名单即可免验证登陆服务器。ssh-copy-id的默认连接端口是22,如果是其他的端口,可以使用命令

ssh-copy-id -p <port> <username>@<remote_host>

配置。

3. 如果配置完成,通过ssh连接登陆命令

ssh [-p <port>] <username>@<remote_host>

即可实现免验证登陆远程服务器;

4. 如果希望远程服务器只能通过ssh密钥认证登陆,那么可以关闭远程服务器的密码登陆功能:
  I. 登陆远程服务器:

ssh [-p <port>] <username>@<remote_host>

  II.  编辑ssh服务端配置文件

vim /etc/ssh/sshd_config

  III. 搜索修改 PasswordAuthentication <config> ===> PasswordAuthentication no
  IV. 重新启动ssh服务端程序
  V. 即可禁止通过ssh密码远程登陆远程服务器

注:第2步可以通过手动将本机的公钥复制到远程服务器的认证密钥文件中实现相同功能,操作如下:

cat ~/.ssh/id_rsa.pub | ssh [-p <port>] <username>@<remote_host> "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

该命令主要是将本机的ssh公钥复制到远程服务器的用户目录下的.ssh/authorized_keys,实现远程服务器对各个客户端的辨别感知能力

使用ssh keys实现免验证登陆远程服务的更多相关文章

  1. linux ssh利用公钥免密登陆

    1.安装检查ssh 如果没有ssh的话,需要安装 #yum  install -y openssh-server openssh-clients 2.生成秘钥 ssh-keygen -t rsa 执行 ...

  2. ssh安全优化免密登陆

    ssh协议 为什么使用ssh协议? 在进行传输时,会对数据进行加密,保证会话安全:telnet协议不是加密传输,在传输过程中如果被抓包,就会造成信息泄露,telnet默认不支持root远程. # 常用 ...

  3. ubuntu免验证登陆权限问题

    由于经常ssh到服务器,每次输入密码很烦.就传了本机公钥到服务器. 和所有教程将的一样,做起来挺简单的. 本机ssh-keygen -t rsa生成公钥和密钥. 将公钥传至服务器,用户目录下.ssh/ ...

  4. ssh公私钥免密登陆

    简介ssh Secure Shell(简写SSH) 为一项建立在应用层和传输层基础上的安全协议,专门为远程登录会话和其他网络服务提供安全性的协议. SSH安全机制分为两种,一种是基于口令的安全认证,一 ...

  5. 群晖DSM修改ssh权限实现免密码登陆

    问题 使用ssh-id-copy正确上传公钥后依然无法免密码登陆 原因 群晖DSM中.ssh文件夹权限不当 解决 赋予正确权限 admin@DiskStation:/var/services/home ...

  6. linux ssh密钥认证, 免密码登陆

    1. 客户端生成密钥 # mkdir ~/.ssh # chmod ~/.ssh # cd ~/.ssh 生成RSA密钥 # ssh-keygen -t rsa (然后连续三次回车) 2. 把公钥传到 ...

  7. Ubuntu使用ssh公钥实现免密码登录

    ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以Ubuntu为例. 有机器A(10.0.2.1),B(10.0.2.100).现想A通过ssh免密 ...

  8. 阿里云ssh免密登陆突然无效

    [root@node03 ~]# ssh-copy-id node02 root@node02's password: sh: .ssh/authorized_keys: Permission den ...

  9. Jenkins进阶系列之——09配置Linux系统ssh免密码登陆

    ssh认证的完整描述:https://www.ibm.com/developerworks/cn/linux/security/openssh/part1/ 说明:点我去查看 今天我们只说生成ssh的 ...

随机推荐

  1. Linux IPC实践(10) --Posix共享内存

    1. 创建/获取一个共享内存 #include <sys/mman.h> #include <sys/stat.h> /* For mode constants */ #inc ...

  2. javascript之prototype原型属性案例

    练习: 给字符串对象添加一个toCharArray的方法,然后再添加一个reverse(翻转)的 方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...

  3. (五)超级猜图Demo引出的细节

    第一部分: 1.按钮的细节,设置背景和前景图片后,要使得背景显示出来,可以设置内边距,影响内部内容. 显示 图片+文字,用button更简单. 问题是,如果不想按钮被点击,在属性面板取消勾选User ...

  4. Gradient Descent 梯度下降法-R实现

    梯度下降法: [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. 应用:求线性回归方程的系数 目标:最小化损失 ...

  5. 【一天一道LeetCode】#19. Remove Nth Node From End of List

    一天一道LeetCode系列 (一)题目 Given a linked list, remove the nth node from the end of list and return its he ...

  6. Linux 用户打开进程数的调整

    Linux 用户打开进程数的调整 参考文章: 关于RHEL6中ulimit的nproc限制(http://www.cnblogs.com/kumulinux/archive/2012/12/16/28 ...

  7. STL算法设计理念 - 二元函数,二元谓词以及在set中的应用

    demo 二元函数对象 #include <iostream> #include <cstdio> #include <vector> #include <a ...

  8. "C#":MySql批量数量导入

    现在对数据库(以MySql为例)的操作大多会封装成一个类,如下例所示: namespace TESTDATABASE { public enum DBStatusCode { ALL_OK, MySq ...

  9. Android特效专辑(一)——水波纹过渡特效(首页)

    Android特效专辑(一)--水波纹过渡特效(首页) 也是今天看到的一个特效,感觉挺漂亮的,最近也一直在筹划一个APP,就想把他当做APP的首页,然后加些处理,关于首页APP的特效等我完工了再贴出来 ...

  10. 基于Bresenham和DDA算法画线段

    直线:y=kx+b 为了将他在显示屏上显示出来,我们需要为相应的点赋值,那么考虑到计算机的乘法执行效率,我们肯定不会选择用Y=kx+b这个表达式求值,然后进行画线段. 我们应当是将它转化为加法运算. ...