sshd服务提供两种安全验证的方法:

基于口令的安全验证:经过验证帐号与密码即可登陆到远程主机。

基于密钥的安全验证:需要在本地生成"密钥对"后将公钥传送至服务端,进行公共密钥的比较。

使用密码验证终归会存在着被骇客暴力破解或嗅探监听的危险,其实也可以让ssh服务基于密钥进行安全验证(可无需密码验证),步骤如下:

1.在本地主机中生成密钥对

[root@wluat ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #回车或设置密钥的存储路径
Created directory '/root/.ssh'.
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:
:9e:ae:cd:eb::a8:7c:ad:ac:af::c2:ce::fa root@wluat
The key's randomart image is:
+--[ RSA ]----+
| |
| |
| |
| . . |
| . . o S |
|.o ... o |
|+.....o |
|=o+ .= |
|=BE+.o*. |
+-----------------+

注:这里为了ssh连接不要再输入密码,没有输入密码,而是直接回车。

2.将生成好的公钥密钥传送至远程主机:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostname

[root@wluat ~]# ssh-copy-id 192.168.0.80
The authenticity of host '192.168.0.80 (192.168.0.80)' can't be established.
RSA key fingerprint is af:b9:dc:e7:7d::d7:e0:ae::0f:b1:a3:1f::.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.80' (RSA) to the list of known hosts.
root@192.168.0.80's password:
Now try logging into the machine, with "ssh '192.168.0.80'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.

注:其是这个就相当于在服务器端建立了~/.ssh,目录,并将公钥写到了远程主机的"~/.ssh/authorized_keys"文件中,文件的权限如下:

root@wls12c ~]$ ll .ssh
总用量
-rw------- root root 8月 : authorized_keys
-rw-r--r-- root root 8月 : known_hosts
[root@wls12c ~]$ ll .ssh/authorized_keys
-rw------- root root 8月 : .ssh/authorized_keys

如果是传送到远程主机的普通用户,authorized_keys的权限并不是600,需要手工修改,否则报如下错误:

[root@wluat ~]# ssh weblogic@192.168.0.80
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

或者手工复制公钥到认证文件:

cat ~/.ssh/id_rsa.pub | ssh user@server "cat - >> ~/.ssh/authorized_keys"

3.测试,连接远程主机的效果

ssh -i ~/.ssh/id_rsa user@hostname
[root@wluat ~]# ssh 192.168.0.80
Last login: Wed Aug :: from 192.168.0.150
[root@wls12c ~]$

已经实现了不要通过密码验证了

注意:第一次用ssh连接服务端的时候会把要服务端的公钥放到客户端的~/.ssh/know_hosts来进行验证,会弹出一个警告:

[root@wluat ssh]# ssh 192.168.0.80
The authenticity of host '192.168.0.80 (192.168.0.80)' can't be established.
RSA key fingerprint is 93:6b:6d:07:34:8c:f5:e0:30:60:34:e0:8d:81:09:c8.
Are you sure you want to continue connecting (yes/no)?

  为了安全,我们可以在80的机器上检查指纹,确定是要连接的主机

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
2048 93:6b:6d:07:34:8c:f5:e0:30:60:34:e0:8d:81:09:c8 /etc/ssh/ssh_host_rsa_key.pub

  键入yes接受密钥并确认连接。您将看到一个通知,说明服务器已被添加到已知主机的列表中,并提示您输入密码:

如果前面有把私钥加密,可以使用ssh-agent让机器记住密钥的密码,从而避免输入:

ssh-agent bash
ssh-add 密钥

  

配置别名登录远程机器,编辑~/.ssh/config

Host ecs    // 输入远程机器别名
HostName 192.*.*.* // 输入远程机器IP地址
Port 22 // 输入端口号,默认为22
User tomcat // 输入登录账号
IdentityFile ~/.ssh/ecs.pem // 输入.pem私钥文件在本机的地址

然后直接ssh tomcat就登录到远程机器的tomcat用户了。

4.修改远程主机的配置文件,让登陆远程主机只能通过密钥登陆,而不能通过密码验证登录。

vim /etc/ssh/sshd_config

PasswordAuthentication no
PubkeyAuthentication yes

5.重启远程主机的sshd服务

[root@wls12c ~]$ service sshd restart

6.配置Xshell通过密钥登陆

工具-->用户密钥管理者

然后导入本地主机生成的“.ssh/id_rsa”私钥,

然后删除本地主机的私钥   rm -rf .ssh/id_rsa

将公钥重命名  mv id_rsa.pub authorized_keys

并修改权限 chmod  700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

就可以让Xshell通过密钥进行登陆了。

ssh通过密钥进行连接的更多相关文章

  1. SSH 指定密钥,连接远程服务器。

    ssh -i /root/.ssh/private.pem user@192.168.1.100 -p 7744 如上, /root/.ssh/private.pem :密钥文件路径user@192. ...

  2. SSH如何通过公钥连接云服务器

    导读 通常我们连接远程服务器(linux)windows下通过putty或xshell等工具远程连接.linux下可以直接通过ssh命令连接.其实这两者都是一致的,都是通过ssh协议进行传输. 如果我 ...

  3. 基于Xshell使用密钥方式连接远程主机

    基于Xshell使用密钥方式连接远程主机 连接远程主机,就验证身份而言,一般有两种方式,一种是通过用户密码:另一种通过公钥的方式(Public Key). 图1 xshell支持验证登录用户的方式 下 ...

  4. ssh的配置,ssh打开密钥登陆,关闭密码登陆。

    刚装玩fedora,那么我们就以fedora为例来说一下怎么配置: 1.先确认是否已安装ssh服务: [root@localhost ~]# rpm -qa | grep openssh-server ...

  5. gitlab用户添加ssh免密钥认证后clone还是要求输入密码

    今天在centos 7公网服务器上安装gitlab在配置ssh免密钥时遇到一个奇怪的事,正确添加了本机的公钥到gitlab账户上,进行clone时死活都要你输入密码gitlab使用yum安装的,之前在 ...

  6. SSH 多密钥配置

    目录 前言 一.SSH 是什么 二.密钥生成工具 三.密钥类型 四.本地配置 1.单密钥配置 2.多密钥配置 五.远端配置 1.GitHub/Gitee 2.服务器 前言 当我们从 GitHub 克隆 ...

  7. Delphi能通过SSH登录Linux,连接MYSQL取数么?像Navicat一样

    百度随时就能搜,你就懒得搜下.http://tieba.baidu.com/p/671327617 Ssh tunnel通常能实现3种功能1) 加密网络传输2) 绕过防火墙3) 让位于广域网的机器连接 ...

  8. 多台计算机之间的ssh无密钥登录

    在很多分布式系统中,我们最常遇到的一个问题是,需要在服务器集群上保证多台机器之间的SSH无密钥登录.以Hadoop为例,为了方便,我们需要在master和slaves之间配置密钥登录,这样我们启动Ha ...

  9. SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 和oracle 查询数据中文乱码问题

    一.SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 linux 设置系统语言 修改 /etc/sysconfig/i18n 文件,如 LANG="en_ ...

随机推荐

  1. uC/OS-III 概要

    本章主要对 uC/OS-III 实时操作系统做一些概要介绍,使读者对 uC/OS-III 有个整体的浅 认识,为后面的章节的详细讲解做一个铺垫. 下图是 uC/OS-III 系统从底层到上层的文件结构 ...

  2. activemq5.11整合spring4.2.3

    前言 这篇博客记录 activemq5.11整合spring4.2.3的过程,免得以后忘记了 1.工程结构 2.pom.xml <project xmlns="http://maven ...

  3. sublime 设置侧边栏颜色

    Sublime Text 2 编辑器: Ctrl+` 输入安装代码,安装package control 插件 ctrl+shift+P : Package install 为什么装不上了呢?出现了什么 ...

  4. BusyBox telnet配置

    1.  busybox配置telnet相关命令. 2.  devpts文件系统,是目前最常见的pseudo终端,使用telnetd服务器,必须加载该文件系统. 在/dev目录下创建一个pts目录,用来 ...

  5. ansible result.stdout.find('running') != -1 判断状态

    [root@m01 ansible-playbook]# cat test_1103.yml ---- hosts: webserver  tasks:    - file: path=/tmp/{{ ...

  6. JS实现点击表头表格自动排序(含数字、字符串、日期)

    这篇文章主要介绍了利用JS如何实现点击表头后表格自动排序,其中包含数字排序.字符串排序以及日期格式的排序,文中给出了完整的示例代码,并做了注释,相信大家都能看懂,感兴趣的朋友们一起来看看吧. < ...

  7. JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比

    1.什么是JVM?   JVM本质上就是一个软件,是计算机硬件的一层软件抽象,在这之上才能够运行Java程序,JAVA在编译后会生成类似于汇编语言的JVM字节码,与C语言编译后产生的汇编语言不同的是, ...

  8. thinkphp 操作mssql2008

    配置文件 <?php return array( //'配置项'=>'配置值' //'USERNAME'=>'admin', //赋值 //数据库配置信息 'DB_TYPE' =&g ...

  9. Java 经典问题

    九种基本类型及封装类 基本类型 boolean byte char short int long double void 二进制位数 1 8(一字节) 16(2字节) 16(2字节) 32(4字节) ...

  10. Spring 4 官方文档学习(十)数据访问之ORM

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/orm.html 占位用,暂略.