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. c++多继承浅析

            图一                                                                                       图二 ...

  2. Unity3D中的序列化测试

    Unity3D中序列化字段常使用[SerializeField],序列化类常采用[System.Serializable],非序列化采用[System.NonSerialized]. 序列化类使用时发 ...

  3. 【Unity笔记】一些Mecanim动画系统、状态机的参数细节

    动画混合树Blend Tree调整动画片段的播放速度: 0 动画不播放 -1 动画倒着播放:如果只有“往前走”的动画,可以变成“往后走”动画 勾选动画是否镜像: 左右颠倒(挥左手变成挥右手) 过度条件 ...

  4. 【WPF】当 ItemsSource 正在使用时操作无效。改用 ItemsControl.ItemsSource 访问和修改元素

    问题: 中文版报错:Additional information: 当 ItemsSource 正在使用时操作无效.改用 ItemsControl.ItemsSource 访问和修改元素. 英文版报错 ...

  5. 【WPF】ScrollViewer无法滚动的问题

    还需要给ScrollViewer注册一个鼠标滚轮事件! XAML: <ScrollViewer x:Name="scrollViewer" Width="950&q ...

  6. signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);

    signal(SIGCHLD, SIG_IGN); //忽略SIGCHLD信号,这常用于并发服务器的性能的一个技巧 //因为并发服务器常常fork很多子进程,子进程终结之后需要//服务器进程去wait ...

  7. 消息队列(RabbitMQ、zorneQ、metaQ、activeMQ)

    术语: AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计. JMS, ...

  8. kafka_zookeeper_配置文件配置

    server.properties配置如下: broker.id=0 num.network.threads=2 num.io.threads=8 socket.send.buffer.bytes=1 ...

  9. MDL---Material Design Lite框架推荐

    INTRO material design相比不会陌生, 现在的移动端基本遵循了这个设计规范, 微软退出过一个残次品universal design(花了半个月时间赶出来的规范)也是借鉴了MD的思想, ...

  10. java-数据库连接工具类 DataSourceUtil.java

    DataSourceUtil.java package com.gordon.utils; import java.sql.Connection; import java.sql.ResultSet; ...