linux中ssh公钥认证配置例子

在两台linux主机上由于环境的需要,经常要配置两台主机之间免密码登录,这就要用到key认证,也就是所谓的公私钥认证。便于理解,我这里指定两台主机为 A 和 B 。如果A主机想免密码登录到B主机上,则A主机上存放私钥,B 主机上存放公钥。通过ssh-keygen 命令生成的两个文件为:公钥文件 ~/.ssh/id_rsa.pub; 私钥文件 ~/.ssh/id_rsa 。而B主机上存放公钥时,需要将id_rsa.pub的内容存放到~/.ssh/authorized_keys 文件内,并且保证权限为600 。

SSH 主要由三部分组成:

传输层协议 [SSH-TRANS]

提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。

用户认证协议 [SSH-USERAUTH]

用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。

连接协议 [SSH-CONNECT]

将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。

一、生成和导入KEY

A主机上生成key

$ ssh-keygen -t rsa
$ ls
id_rsa  id_rsa.pub
将key导入到远程的B主机上,并修改权限

A主机上操作
$ cat /root/.ssh/id_rsa.pub | ssh root@远程服务器ip 'cat - >> ~/.ssh/authorized_keys'
B主机上操作
$ chmod 600 ~/.ssh/authorized_keys
不过还有更简单的方法,不需要在B主机上再修改权限 ,而直接将公钥内容导入到远程主机上,使用ssh-copy-id命令,如下:

$ ssh-copy-id  -i /root/.ssh/id_rsa root@xxx,xxx,xxx,xxx

二、配置sshd_config

配置完key后,需要在sshd_config文件中开启key认证

$ vim /etc/ssh/sshd_config
PubkeyAuthentication yes  //将该项改为yes   
修改完成后,通过/etc/init.d/sshd restart 重启ssh服务重新加载配置。如果想要禁用密码认证,更改如下项:

$ vim /etc/ssh/sshd_config
UsePAM yes

UserPAM no

更多配置参数及其意义,可以通过man sshd_config 查看。

三、ssh_config及多私钥配置

sshd_config是一个全局服务端的配置文件(即本机开启sshd服务的相关配置),而ssh_config则是一个全局客户端的配置文件。例如,ssh_config中其中两行就定义了每个用户下默认私钥key的路径:

#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
如果出现多台server 多个私钥文件,在client主机上怎么配置呢?全部追加到 ~/.ssh/id_rsa(或id_dsa)中?经测试,这是行不通的,只有第一个私钥可以用,后面的都不行。

在多台server时,可以有两种解决方案。

1、在不同的主机上,使用相同的公钥,则这些机器的私钥也相同。客户端上只需要配置这一个私钥就可以登录所有的主机。

2、不同的主机上使用不同的公钥时, 这时会有多个不同的私钥。这就需要为不同的主机指定不同的私钥文件,这个配置可以在ssh_config中配置(具体可以参看该文件的配置样例)。当然更多情况下,我们只会在要使用的用户做个情化的配置,配置文件为~/.ssh/config(该文件不存在时,请创建之),格式如下:

Host xxxx
IdentityFile 私钥文件名
Port 端口号
User 你登陆xxxx服务器用的账号
注:这里的配置文件同样可以参看ssh_config里的配置,也可以通过man ssh_config获取更多有用信息。

Host *
User www
Port 22
CheckHostIP no
Compression yes
ForwardAgent yes
Host 10.1.100.*
User dev
Port 22
IdentityFile ~/.ssh/dev.key

如上面的配置,默认我们连接所有的主机(除后面给出的10.1.100.*之外的所有主机)时,默认使用户名为www ,即 ssh 172.20.1.100 = ssh www@172.20.1.100 -p 22 。当我们连接10.1.100.* 下的所有主机时,默认会使用dev用户,默认的私钥会用 ~/.ssh/dev.key 文件。同理,可以增加更多配置。

注:出于安全等考虑,一定要将 ~/.ssh/config文件和 ~/.ssh/key文件的权限设为600 。

时间: 2024-10-26 21:58:53

linux中ssh公钥认证配置例子的相关文章

Centos6下使用SSH密钥认证配置例子

环境: 本地系统:win8.1 64位 服务器系统:CentOS 5/6 x86_64 总流程: 1.putty生成public key和private key 2.将public key 分发到linux服务器上面,使putty可以使用密钥链接到linux 3.将private key导出成openssh private key格式,并分发给xshell使用 一.使用putty生成public key和private key 1.下载putty 文件下载 2.生成密钥 运行puttygen.e

linux中ssh快速备份数据库例子

先进入你需要备份到的文件夹,然后执行如下命令 备份数据库,ssh命令:mysqldump -p 数据库名 -u 数据库用户名 > bak.sql(也可以是你希望的文件名称) 不压缩备份 mysqldump -p 数据库名-u 数据库用户名> bak.sql gz压缩备份 mysqldump -p 数据库名 -u 数据库用户名 | gzip > wuxiaowu.sql.gz zip压缩备份 mysqldump -p 数据库名 -u 数据库用户名 | gzip > wuxiaowu.

Nginx中的用户认证配置及阻止用户使用代理访问的方法_nginx

nginx用户认证配置( Basic HTTP authentication)ngx_http_auth_basic_module模块实现让访问着,只有输入正确的用户密码才允许访问web内容.web上的一些内容不想被其他人知道,但是又想让部分人看到.nginx的http auth模块以及Apache http auth都是很好的解决方案. 默认情况下nginx已经安装了ngx_http_auth_basic_module模块,如果不需要这个模块,可以加上 --without-http_auth_

Linux中应该怎么分区配置才会比较不错

第一个问题是哪些东西单独分区比较好.我在 http://www.aliyun.com/zixun/aggregation/13835.html">Ubuntu 的社区上看到的建议有很多种,比如最基本的把 /boot./home 单独分出来的,也有把 /tmp./var 或 /usr 也单独分出来的.不过根据我的观察以及设想来说,我觉得,而且我个人采用的是把 /boot./tmp 及 /home 单独分区,为什么这样选择呢? 首先是 /boot 区,由于装载的是启动器,一般来说比较建议单独分

linux中SSH Tunnel的简单使用例子

背景介绍: 目前,线上有好几个数据中心,不同数据中心之间的速度差异还是比较大的,我们一般选择一个最优的数据中心作为VPN的接入点. 但有些时候直接通过VPN访问其它数据中心的服务会很慢,于是就临时通过SSH Tunnel来解决. 应用场景: 直接访问服务器idc1-server1很快,但是直接访问idc2-server2很慢,而idc1-server1到idc2-server2却很快: 于是,我们打算用idc1-server1服务器作为跳板来连接idc2-server2. ssh -i /pat

linux中SSH 远程端口转发的配置

我在开发 Telegram bot 时,是先在本地写好代码,上传到服务器再测试的.因为 telegram 的 setWebhook 指定的网址是线上的.这一点,与微信公众号开发时的接入服务器配置是一样的. 当然,这样谈不上什么开发效率. 网上有些端口映射的工具,比如 ngrok,但 SSH 本身就带了这样一个工具. 假设我 telegram webhook 地址是 https://www.111cn.net /telegram,服务器运行在 3344 端口,本地的开发环境运行在 localhos

linux中ssh配置与登录命令

首先,如果没有安装,那么就在命令行里apt-get install ssh 安好后,其实就可以登录开启了ssh服务的机器了   开启ssh服务的命令为: sudo /etc/init.d/sshd restart (生成公私密钥对) 查看ssh状态命令: sudo /etc/init.d/sshd status 如果是没有启动sshd守护进程,那么只需要:sudo /usr/sbin/sshd (不需要每次做)   登录时候,输命令:ssh (对方ip) -l (对方机器上有的用户名) -p (

Linux中的Configure选项配置参数详解

  Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了.Configure脚本配置工具就是基础之一,它是autoconf的工具的基本应用. 与一些技巧相比,Configure显得基础一些,当然使用和学习起来就显得枯燥乏味一些,当然要成为高手,对基础的熟悉不能超越哦. 为此我转载了一篇关于Configure选项配置的详细介绍.供大家参考 'con

Linux中ClusterShell安装与配置教程

ClusterShell的安装与配置 ClusterShell的安装很Easy,如果使用APT或YUM包管理方式的话,基本就是一条命令的事儿,我就不说了,这里说一下如何从源代码安装,需要在源代码目录执行如下命令:  代码如下 复制代码 shell> python setup.py install 为了使用的方便,还需要拷贝配置文件到指定目录:  代码如下 复制代码 shell> mkdir /etc/clustershell shell> cp conf/* /etc/clustersh