`

Linux系统上的SSH密钥认证、ssh-agent认证

阅读更多

通过linux系统,登陆Linux服务器来实现昨天的四种认证方式。
更多的内容,我们不说了,直接进入主题,但之前要确保有两台Linux系统来进行此实验,而且要是连通的哦。本文是通过CentOS5(IP:192.168.6.19 hostname:test.opsers.org [root@test ~]# )来连接RHEL6(IP:192.168.6.10 hostname:yufei.opsers.org [root@yufei ~]# )服务器。下面进入正题:

 

1、用户名+密码认证

 

在CentOS5上进行操作
[root@test ~]# ssh root@192.168.6.10
The authenticity of host '192.168.6.10 (192.168.6.10)' can't be established.
RSA key fingerprint is 8c:b0:8a:bc:d1:ca:fc:74:32:5c:a7:e7:0d:59:76:43.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.6.10' (RSA) to the list of known hosts.
root@192.168.6.10's password:
Last login: Mon Apr 25 13:59:19 2011
[root@yufei ~]#

让我们退出RHEL6系统,回到RHEL5环境中
[root@yufei ~]# exit
logout
Connection to 192.168.6.10 closed.
[root@test ~]#

这个就不用多说,自己输入输入名和密码登陆就OK。我们主要来讲下面三种认证方式。

2、密钥认证

 

在CentOS5上进行操作
创建无密码的密钥
[root@test ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:
fc:c9:fe:e9:a0:d4:30:96:28:0a:f9:c6:e4:8d:ec:0a root@test.opsers.org
[root@test ~]#


把公钥上传到RHEL6服务器上
[root@test ~]# ssh-copy-id -i .ssh/id_rsa.pub 192.168.6.10
15
root@192.168.6.10's password:
Now try logging into the machine, with "ssh '192.168.6.10'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

 


在RHEL6上操作
确定上传来的文件是存在的
[root@test ~]# ssh root@192.168.6.10
root@192.168.6.10's password:
Last login: Mon Apr 25 14:00:51 2011 from 192.168.6.19
[root@yufei ~]# ls -l .ssh/authorized_keys
-rw-------. 1 root root 402  4月 25 14:06 .ssh/authorized_keys
[root@japie ~]#

说明文件上传成功

配置sshd_config
[root@japie ~]# cd /etc/ssh/
[root@japie ssh]# cp sshd_config sshd_config.bak
[root@japie ssh]# vim sshd_config

把下面的两行注释去掉
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

保存后,重新启动sshd服务
[root@japie ssh]# service sshd restart
[root@japie ssh]# exit
logout
Connection to 192.168.6.10 closed.
退出RHEL6系统,回到RHEL5环境中

[root@test ~]# ssh root@192.168.6.10
Last login: Mon Apr 25 14:07:29 2011 from 192.168.6.19
[root@japie ~]#

已经无需输入密码直接登陆了

让我们退出RHEL6系统,回到RHEL5环境中
[root@japie ~]# exit
logout
Connection to 192.168.6.10 closed.
[root@test ~]#

3、密钥+密钥密码认证

 

在CentOS5上进行操作
重新生成密钥,并设置带密码的密钥
[root@test ~]# rm -fr .ssh
[root@test ~]# 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:
26:88:da:e1:72:a8:a5:f8:6a:a3:d7:4c:eb:64:1c:5d root@test.opsers.org


上传公钥
[root@test ~]# ssh-copy-id -i .ssh/id_rsa.pub 192.168.6.10
15
The authenticity of host '192.168.6.10 (192.168.6.10)' can't be established.
RSA key fingerprint is 8c:b0:8a:bc:d1:ca:fc:74:32:5c:a7:e7:0d:59:76:43.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.6.10' (RSA) to the list of known hosts.
root@192.168.6.10's password:
Now try logging into the machine, with "ssh '192.168.6.10'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
[root@test ~]#

这时候会自动覆盖掉我们前面上传的公钥文件,我们再来给大家看一下公钥的属性
[root@test ~]# ssh root@192.168.6.10
Enter passphrase for key '/root/.ssh/id_rsa':
Last login: Mon Apr 25 14:12:17 2011 from 192.168.6.19
[root@yufei ~]# ls -l .ssh/authorized_keys
-rw-------. 1 root root 804  4月 25 14:19 .ssh/authorized_keys
[root@japie ~]#

我们输入刚才设置的密码,已经能正常登陆了,而且此公钥文件属性也是新创建的。
注意:
a、如果说,你没有对上传的公钥做修改的话,我们在RHEL6服务器上对配置文件什么也不用做(上一个实验已经做过了)。直接可以用了。
b、我们没有退出RHEL6服务器的环境,因为下面一个认证还需要对SSH的配置文件做修改

4、SSH代理:密钥+密钥密码、但无需输入密码

 

接着上面的结果继续在RHEL6服务器上操作
[root@japie ~]# vim /etc/ssh/sshd_config
AllowAgentForwarding yes

把前面的注释去掉
然后重新启动sshd服务
[root@japie ~]# service sshd restart

退出RHEL6服务器环境,回到CentOS5中来
[root@japie ~]# exit
logout
Connection to 192.168.6.10 closed.
[root@test ~]#

在CentOS5上进行操作
[root@test ~]# ssh-agent bash
[root@test ~]# ssh-add
Enter passphrase for /root/.ssh/id_rsa:
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
[root@test ~]#

登陆测试
[root@test ~]# ssh root@192.168.6.10
Last login: Mon Apr 25 14:27:15 2011 from 192.168.6.19
[root@japie ~]#

我们已经无需密码正常登陆上了

我们还是退出RHEL6服务器,回到CentOS5上来
[root@japie ~]# exit
logout
Connection to 192.168.6.10 closed.
[root@test ~]#

这里有一个问题:当我们退出shell环境后,还需要执行一下ssh-agentbash和ssh-add才能正常使用,有没有一个办法,让我们不用执行这两个命令,直接输入认证密码就能登陆呢?我下面给出两种实现方法,大家可以根据自己的喜好来实现。
第一种方法:在/etc/profile.d/下创建一个文件,如我起名ssh-agent.sh
[root@test ~]# vim /etc/profile.d/ssh-agent.sh
#!/bin/sh
if [ -f ~/.agent.env ]; then
. ~/.agent.env >/dev/null
if ! kill -0 $SSH_AGENT_PID >/dev/null 2>&1; then
echo "Stale agent file found. Spawning new agent..."
eval `ssh-agent |tee ~/.agent.env`
ssh-add
fi
else
echo "Starting ssh-agent..."
eval `ssh-agent |tee ~/.agent.env`
ssh-add
fi

这时候,我们退出SHELL后,重新登陆SHELL后,会出现下面的提示
Xshell:\> ssh root@192.168.6.19
Connecting to 192.168.6.19:22...
Connection established.
Escape character is '^@]'.
Last login: Mon Apr 25 15:12:40 2011 from 192.168.6.1

我们再登陆RHEL6服务器还是能正常连接的,而且无需再次输入密码了
[root@test ~]# ssh root@192.168.6.10
Last login: Mon Apr 25 14:31:06 2011 from 192.168.6.19
[root@japie ~]#

我们还是先退出RHEL6服务器,回到CentOS5上来
[root@japie ~]# exit
logout
Connection to 192.168.6.10 closed.
[root@test ~]#

第二种方法:用keychain来实现
首先下载软件,目前最新版本是2.7.1
[root@test ~]# wget http://www.funtoo.org/archive/keychain/keychain-2.7.1.tar.bz2
然后进行软件的安装
[root@test ~]# tar jxvf keychain-2.7.1.tar.bz2
[root@test ~]# cd keychain-2.7.1
[root@test keychain-2.7.1]# install -m 0755 keychain /usr/bin/

或者是直接拷贝keychain到/usr/bin/目录下,都是一样的效果
然后编辑用户家目录下的.bash_profile文件
[root@test keychain-2.7.1]# cd
[root@test ~]# vim .bash_profile

在最后加入下面内容
eval `keychain --eval --agents ssh id_rsa`
删除我们第一种方法创建的文件
[root@test ~]# rm -f /etc/profile.d/ssh-agent.sh
退出SHELL,再次登陆测试
[root@test ~]# exit
Xshell:\> ssh root@192.168.6.19
Connecting to 192.168.6.19:22...
Connection established.
Escape character is '^@]'.
Last login: Mon Apr 25 15:02:10 2011 from 192.168.6.1
* keychain 2.7.1 ~ http://www.funtoo.org
* Found existing ssh-agent: 4133
* Known ssh key: /root/.ssh/id_rsa
[root@test ~]# ssh root@192.168.6.10
Last login: Mon Apr 25 15:02:55 2011 from 192.168.6.19
[root@japie ~]# exit
logout
Connection to 192.168.6.10 closed.
[root@test ~]#

注:
a、ssh root@192.168.6.19这种方式来接连,如果再打开一个会话的话,就还需要输入一次密码。
b、如果重新启动系统后,就需要输入一次密钥密码。

说明:不知道有没有一种方法,能让系统重新启动过后,也无需输入密钥密码,如果有朋友知道的,希望能分享一下,谢谢!

分享到:
评论

相关推荐

    如何在Linux中配置基于密钥认证的SSH(转载)1

    为了在Linux上配置基于密钥认证的SSH,首先你需要生成SSH密钥对。在本地系统上,可以运行`ssh-keygen`命令来生成默认为2048位的RSA密钥对。在执行该命令时,系统可能会提示输入一个密码或passphrase,这有助于增加...

    Xshell通过SSH密钥、SSH代理连接Linux服务器详解

    本文将详细讲解如何通过SSH密钥对和SSH代理来连接Linux服务器,以实现更安全、便捷的管理。 首先,了解SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。SSH密钥对认证是SSH...

    wsl-ssh-agent:可以与Windows子系统(Linux)的Windows ssh-agent.exe服务进行交互的助手

    该项目旨在通过允许从的内部访问Windows自己的ssh-agent服务持有的SSH密钥来纠正这种情况。 我的第一次尝试成功,但是由于Windows互操作限制,因此需要在WSL端进行详尽的生命周期管理。 Windows从内部版本17063...

    ssh-agent命令 ssh密钥管理器

    其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。 语法格式: ssh-agent [参数] 常用参数:...

    linux-远程管理SSH密钥以控制对主机的访问

    在Linux环境中,SSH(Secure Shell)是一种用于安全远程登录到服务器的标准协议,它允许...正确配置和使用SSH密钥对、SSH配置文件、密钥代理和集中式密钥管理工具,可以有效提升系统的安全性,同时简化日常运维工作。

    smartcard-scripts:用于运行具有 ssh 密钥支持的 gpg-agent 以及将密钥加载到 Yubikey Neo 的 PIV-II 小程序中的帮助脚本

    智能卡帮助脚本 gpg-agent-functions.sh 从~/.bash_profile此脚本(由于使用launchctl getenv来获取$SSH_AUTH_SOCK的...函数gpg-agent-up和gpg-agent-down然后启动和停止gpg-agent然后根据需要重新链接~/.ssh_aut

    ssh-agent-helper:在Windows上使用CMD,PowerShell等中的SSH密钥

    SSH代理助手在Windows上使用CMD,PowerShell等中的SSH密钥它可以解决什么问题? 如果要在命令提示符( cmd )或PowerShell中将ssh与SSH密钥(或通过SSH密钥进行身份验证的git )一起使用,则必须在终端上使用启动...

    Python库 | github_ssh_key-0.2.0-py3-none-any.whl

    4. **配置SSH-Agent**:为了简化SSH密钥的使用,库可能包含了配置SSH-Agent的能力,这样用户就不需要每次都手动输入密码。 5. **自动化流程**:对于开发语言和运维相关的任务,例如自动部署、持续集成等,`github_...

    ssh 详细架包-------------------------------

    公钥认证是SSH的一种安全登录方式,用户在服务器上放置公钥,本地保留私钥。这样,只需输入私钥的密码即可登录,无需每次输入密码。 6. **SSH隧道** SSH支持隧道功能,可以将任意TCP连接通过SSH加密,比如创建...

    ssh-add命令 agent的高速缓存

    ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中。该命令位置在/usr/bin/ssh-add。 语法格式:ssh-add [参数] 常用参数: -D 删除ssh-agent中的所有密钥 -d 从ssh-agent中的删除密钥 -l 显示ssh-agent中...

    新手教学系列-SSH基础使用教程

    #### 三、SSH密钥管理 - **私钥与公钥的概念**: - **私钥**:通常存储在客户端,用于解密从服务器发送来的信息。 - **公钥**:则被放置在服务器端,用于加密从客户端发送来的信息。 - **密钥生成**: - 可以使用...

    go-ssh-agent-locker:当 OSX 钥匙串被锁定时从 ssh-agent 中删除密钥

    go-ssh-agent-locker go-ssh-agent-locker 是一个简单的应用程序,只要钥匙串被锁定,它就会杀死 ssh-agent安装 go get github.com/MDrollette/go-ssh-agent-lockercp $GOPATH/bin/go-ssh-agent-locker /usr/local/...

    docker-ssh-agent:通过SSH连接的Jenkins代理的Docker映像

    要将此映像与,您需要使用环境变量JENKINS_AGENT_SSH_PUBKEY而不是作为启动参数来传递公共SSH密钥。 在“ Docker模板”的“环境”字段(高级部分)中,只需添加: JENKINS_AGENT_SSH_PUBKEY= 不要在公钥周围加上...

    Linux系统使用RSA密钥登录远程服务器.pdf

    在Linux系统中,使用RSA密钥...通过以上步骤,你可以实现Linux系统使用RSA密钥登录远程服务器,大大提高了远程访问的安全性和便利性。在实际工作中,了解和掌握这种认证方式对于提升工作效率和保障系统安全都至关重要。

    SSH面试题总结.

    - 如何在Linux系统中生成SSH密钥对? 2. **SSH配置:** - 如何配置SSH服务,使其只允许特定用户登录? - 如何设置SSH端口号以提高安全性? - 什么是SSH配置文件`/etc/ssh/sshd_config`,如何通过修改它来定制...

    Python-MacOS和Linux上的命令行ssh管理工具

    标题"Python-MacOS和Linux上的命令行ssh管理工具"暗示了我们将使用Python编程语言创建一个命令行工具,该工具可以在Mac OS和Linux系统上简化SSH连接和管理的过程。Python因其简洁、易读的语法和丰富的库支持而成为...

    linux ssh ssh

    1. 在Linux服务器上生成SSH密钥对:使用`ssh-keygen`命令生成公钥和私钥,通常默认存储在`~/.ssh`目录下。 2. 将公钥复制到Linux服务器:使用`ssh-copy-id`命令将本地的公钥复制到远程服务器的`~/.ssh/authorized_...

    ssh命令秘钥

    SSH命令是Linux和Unix-like系统中广泛使用的工具,它允许用户通过命令行界面进行远程操作。本文将深入探讨SSH命令以及其密钥认证机制。 ### SSH命令基础 SSH命令的基本用法是`ssh [user@]hostname`,其中`user`是...

    iam-ssh-agent:用于IAM实体的​​无密钥SSH代理

    iam-ssh-agent旨在用于不太受信任的连续集成环境中,在该环境中,您想使用ssh密钥来克隆源代码控制存储库而无需提供原始密钥材料。 iam-ssh-agent分为两个部分:一个二进制文件,它通过ssh-agent协议绑定unix域套...

    基于Linux操作系统的SSH.rar

    ### SSH密钥对认证 1. **生成密钥对**:SSH支持公钥/私钥对认证,提供比密码更安全的认证方式。使用`ssh-keygen`命令生成一对密钥,通常将公钥放置在远程服务器的`~/.ssh/authorized_keys`文件中。 2. **复制公钥*...

Global site tag (gtag.js) - Google Analytics