`
missall
  • 浏览: 125000 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

同主目录多用户通过ssh进行密钥登陆

阅读更多

  我们以前已经提过如何在客户端创建密钥后,拷贝到服务端,今后就可以使用该密钥进行无密码认证的登陆了。如果您已经忘了?可以看看这里:[原]putty使用密钥登陆OpenSSH 。在这情况下,都是指每个用户自己去登陆服务器。但在今天的项目实施中,遇是这样的情况:
    作为ssh客户端的机器,有多个用户,他们属于同一个主目录,并且都需要进行密钥验证。而私钥id_rsa的权限必须为600,其他用户不能访问。我们就需要用ssh的-i参数解决这问题。

一、系统环境

引用
操作系统:Asianux 3.0
应用软件:OpenSSH v4.3p2
客户端和服务端同一IP地址:192.168.48.128
服务端用户:hyphen(以该用户模拟服务端)
用户1:test、主目录:/home/test、宿组:test
用户2:user、主目录:/home/test、宿组:test


二、单用户密钥登陆
为了方便说明,这里先做个单用户使用密钥登陆sshd服务器的过程。以test用户为例。
1、客户端
创建密钥:

引用
[test@asianux3 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
15:b0:02:35:b4:0d:d3:fe:9c:e8:56:e1:a6:06:8c:e9 test@asianux3


然后拷贝公钥到服务器上:

引用
[test@asianux3 ~]$ scp .ssh/id_rsa.pub hyphen@192.168.48.128:~/.ssh/authorized_keys
The authenticity of host '192.168.48.128 (192.168.48.128)' can't be established.
RSA key fingerprint is 19:05:03:5c:ac:b5:9d:ba:15:5a:46:7e:32:0e:b8:79.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.48.128' (RSA) to the list of known hosts.
hyphen@192.168.48.128's password:
id_rsa.pub  


2、服务端
在服务端上创建的authorized_keys默认权限是644,这不能满足安全要求,需要改为600:

引用
[hyphen@asianux3 ~]$ ll ~/.ssh/authorized_keys
-rw-r--r-- 1 hyphen hyphen 395 11-10 13:32 /home/hyphen/.ssh/authorized_keys
[hyphen@asianux3 ~]$ chmod 600 ~/.ssh/authorized_keys
[hyphen@asianux3 ~]$ ll ~/.ssh/authorized_keys
-rw------- 1 hyphen hyphen 395 11-10 13:32 /home/hyphen/.ssh/authorized_keys


3、测试
使用test用户,使用密钥进行登陆:

引用
[test@asianux3 ~]$ ssh hyphen@192.168.48.128
Last login: Mon Nov 10 12:34:20 2008 from 192.168.48.128
[hyphen@asianux3 ~]$


测试成功。

三、多用户登陆
1、权限问题
user用户的信息如下:

引用
[user@asianux3 ~]$ pwd
/home/test
[user@asianux3 ~]$ id
uid=514(user) gid=513(test) groups=513(test)


由于私钥权限是600的,user用户无法使用它进行登陆:

引用
[user@asianux3 ~]$ ll ~/.ssh/id_rsa
-rw------- 1 test test 1675 11-10 12:40 /home/test/.ssh/id_rsa
[user@asianux3 ~]$ ssh hyphen@192.168.48.128
Enter passphrase for key '/home/test/.ssh/id_rsa':
hyphen@192.168.48.128's password:


2、解决
使用test用户把私钥文件拷贝成另一个文件:

引用
[test@asianux3 ~]$ cd .ssh/
[test@asianux3 .ssh]$ cp id_rsa common_id_rsa
[test@asianux3 .ssh]$ chmod 640 common_id_rsa
[test@asianux3 .ssh]$ ll common_id_rsa
-rw-r----- 1 test test 1675 11-10 13:43 common_id_rsa


user用户使用ssh的-i参数指定私钥文件来登陆:

引用
[user@asianux3 ~]$ ssh -i .ssh/common_id_rsa hyphen@192.168.48.128
Last login: Mon Nov 10 13:35:29 2008 from 192.168.48.128
[hyphen@asianux3 ~]$


登陆成功。

四、其他问题
1、修改私钥id_rsa的权限
如果您看到id_rsa的私钥是600,然后希望其他用户可以使用该私钥,而改为640权限的话。那其他用户确实可以使用密钥登陆远端服务器的。

引用
[test @asianux3 .ssh]$ chmod 640 id_rsa
[test@asianux3 .ssh]$ ll id_rsa
-rw-r----- 1 test test 1675 11-10 12:40 id_rsa
[user @asianux3 ~]$ ssh hyphen@192.168.48.128
Last login: Mon Nov 10 13:44:35 2008 from 192.168.48.128
[hyphen@asianux3 ~]$


但原来的test用户就会因权限问题给挡住了:

引用
[test@asianux3 .ssh]$ ssh hyphen@192.168.48.128
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/home/test/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

bad permissions: ignore key: /home/test/.ssh/id_rsa
Enter passphrase for key '/home/test/.ssh/id_rsa':
hyphen@192.168.48.128's password:


解决方式还是和上面的一样啦,另外给一个600权限的私钥给test使用:

引用
[test@asianux3 .ssh]$ ll common_id_rsa
-rw-r----- 1 test test 1675 11-10 13:43 common_id_rsa
[test@asianux3 .ssh]$ chmod 600 common_id_rsa
[test@asianux3 .ssh]$ ssh -i common_id_rsa hyphen@192.168.48.128
Last login: Mon Nov 10 13:48:06 2008 from 192.168.48.128
[hyphen@asianux3 ~]$


成功了吧。O(∩_∩)O
※ 我觉得,最好还是保留原用户的密钥id_rsa权限,而另外给其他用户私钥清晰点咯。

2、客户端钥匙改变
linux上的ssh客户端,在登陆服务端时,会把自己的公钥写入~/.ssh/known_hosts文件中:

引用
[test@asianux3 .ssh]$ ssh hyphen@192.168.48.128
The authenticity of host '192.168.48.128 (192.168.48.128)' can't be established.
RSA key fingerprint is 19:05:03:5c:ac:b5:9d:ba:15:5a:46:7e:32:0e:b8:79.
Are you sure you want to continue connecting (yes/no)? yes


若后来因其他原因(如使用新的私钥等),客户端的公钥被修改了,在登陆服务器时,就会包错:

引用
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
19:05:03:5c:ac:b5:9d:ba:15:5a:46:7e:32:0e:b8:79.
Please contact your system administrator.
Add correct host key in /home/test/.ssh/known_hosts to get rid of this message.
Offending key in /home/test/.ssh/known_hosts:1
RSA host key for 192.168.48.128 has changed and you have requested strict checking.
Host key verification failed.


这时,请把客户端的~/.ssh/known_hosts文件中对应的一行公钥删除,或直接删除该文件。

 

原文地址 http://www.linuxfly.org/read.php/261.htm

分享到:
评论

相关推荐

    [原]同主目录多用户通过ssh进行密钥登陆[归类].pdf

    [原]同主目录多用户通过ssh进行密钥登陆[归类].pdf

    skm:一个简单而强大的SSH密钥管理器

    它可以帮助您轻松管理多个SSH密钥! 特征 创建,列出,删除您的SSH密钥 通过别名管理所有SSH密钥 选择并设置默认的SSH密钥 通过别名显示公钥 将默认的SSH密钥复制到远程主机 重命名SSH密钥别名 备份和还原所有SSH...

    Linux下实现免密码登录(超详细)

     生成之后会在用户的根目录生成一个 “.ssh”的文件夹  进入“.ssh”会生成以下几个文件  authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥  id_rsa : 生成的私钥文件  id_rsa....

    docker-tarreceive:提供一个服务器端点,在该端点中将通过管道传输的数据流提取到指定的卷中

    概括 该存储库基于 ,后者创建了一个系统用户,该用户通过SSH运行单个命令,并管理SSH密钥(authorized_keys)的ACL。 这使我们能够提供一个服务器端点,在其中将管道输入的tar数据流提取到环境变量指定的卷中。参考...

    users:用户食谱开发库

    它还管理ssh密钥到用户主目录的分发。 维护者 这本食谱由Sous Chefs负责维护。 Sous Chefs是由厨师食谱维护者组成的社区,他们共同维护重要的食谱。 如果您想了解更多信息,请访问或在的Chef Community Slack上与...

    ansible-ubuntu-server

    Ansible服务器设置设定步骤创建本地或远程VM 安装ubuntu 使用密码和主目录创建(可访问的)用户将您的公共密钥复制到该用户主目录的.ssh目录中的authorized_keys文件中(如果不存在,请创建该文件)(或使用ssh-copy...

    功能齐全且高度可配置的SFTP服务器-Golang开发

    SFTPGo使用Go Features编写的功能齐全且可高度​​配置的SFTP服务器,每个帐户都被chroot到其主目录。...支持每个用户多个公共密钥。 SSH用户证书认证。 键盘交互式身份验证。 您可以轻松设置自定义

    sftpgo:功能齐全且高度可配置的SFTP服务器,具有可选的FTPS和WebDAV支持-S3,Google云存储,Azure Blob

    每个本地帐户都位于其主目录中,对于基于云的帐户,您可以限制对特定基本路径的访问。 公钥和密码认证。 支持每个用户多个公共密钥。 SSH用户。 键盘交互式身份验证。 您可以轻松设置可自定义的多因素身份验证。 ...

    ansible-arangodb-operator:Ansible角色和示例剧本,用于在Kubernetes集群中部署ArangoDB Operator

    ansible-arangodb-operator 目的 在Kubernetes中部署的角色。 可以在多个名称空间中部署多个...使用适当的主机和SSH密钥设置您的ansible库存: 要远程运行: 在sample-inventory/host_vars/master您的ansible_ho

    test-github-actions

    每个本地帐户都位于其主目录中,对于基于云的帐户,您可以限制对特定基本路径的访问。 公钥和密码认证。 支持每个用户多个公共密钥。 SSH用户。 键盘交互式身份验证。 您可以轻松设置可自定义的多因素身份验证。...

    grunt-vagrant-exec:针对 Vagrant 机器执行命令

    通过 Grunt 在 Vagrant 机器上执行命令。 在制品! 基本原理 其他做这种事情的 Grunt 插件对我来说效果不佳。 特征: 多任务 支持多条指令 支持在其中运行命令的当前工作目录 默认情况下将从vagrant ssh-config的...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    多用户在线Ftp程序 第9周 上节回顾 paramiko模块详解 ssh密钥讲解 进程与线程 多线程 多线程案例 主线程与子线程 线程锁 线程之信号量 线程之Event 队列Queue 作业之主机批量管理 第10周 心灵分享 上节回顾 多...

    irods-ldap-sync

    当LDAP用户对象包含sshPublicKey属性时,还将创建一个包含该密钥的〜/ .ssh / authorized_keys条目。 请查看.github / workflows / ci.yml以获取配置详细信息 跑步 您有多个运行选项: 使用LDAP和iRODS docker容器...

    CuteFTP9简易汉化版

    多个Connections-Connect,浏览和导航多个站点同时进行。大多数FTP客户强迫你断开连接时从一个网站到另一个。每个连接发生在自己的窗口。连接可以平铺的windows,级联或通过点击访问对应的选项卡。 会话Logs-...

    k8s二进制文件以及docker二进制文件

    5.配置 ansible ssh密钥登录,此操作需要在所有机器上执行 ssh-keygen -t rsa -b 2048 回车 回车 回车 ssh-copy-id $IP #$IP为所有虚拟机,按照提示输入yes 和root密码 (密钥补充) 二、安装kubernetes集群 ...

    java源码包---java 源码 大量 实例

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    6.3 通过ext3grep恢复误删除的文件与目录 6.3.1 数据恢复准则 6.3.2 实战ext3grep恢复文件 6.4 通过ext3grep恢复误删除的MySQL表 6.4.1 MySQL存储引擎介绍 6.4.2 模拟MySQL表被误删除的环境 6.4.3 通过...

    java源码包2

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

    java源码包3

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

    java源码包4

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

Global site tag (gtag.js) - Google Analytics