Tag: ssh

ssh sftp 的设置

今天有个同事说他的 secure file transfer 使用不能。

看了下,貌似是 sshd_config 的配置有点问题,再看了下,原来是red hat 的配置用在了debian 上。

在 rh 系下,sshd_config 应该是

Subsystem       sftp    /usr/libexec/openssh/sftp-server

在 debian 下,应该是

Subsystem       sftp   /usr/lib/openssh/sftp-server

路径不一样了。。。

ssh-agent 的安全隐患

ssh 是SA 的一大利器,登录服务器、翻墙。。。ssh 通常都配合着 ssh-agent 来使用,ssh-agent 是个管理 private key 的 passphrase 的工具,启动 ssh-agent 后,执行一次 ssh-add ,此时需要输入一次 private key 的 passphrase ,输入正确后,passphrase 就归 ssh-agent 管理,往后的 ssh 操作,就不需要询问 passphrase 了。这里需要注意,ssh 必须开启了forwardagent ,一劳永逸的方法,就是在 /etc/ssh/ssh_config 中把#ForwardAgent no 去掉注释,并改为 ForwardAgent yes。

重点说说它的安全隐患。

ssh-agent 工作过程中会创建一个 socket 文件在 /tmp 目录里,如 /tmp/ssh-jlhtX14952/agent.14952 。我们需要使用 ssh-agent 时,运行一下 ssh-add ,把 private key 加入到 ssh-agent 中管理,此时,是需要输入一次 passphrase 的,当输入正确了以后,往后都不需要输入 passphrase 了。任何用户,只要连接上这个socket ,就可以使用已经加入到ssh-agent 管理的 private key 了,而且不需要输入 passphrase 。所以,这个 socket 的权限是 600 ,如:

srw——-  1 raymond raymond 0 May  1  2009 /tmp/ssh-jlhtX14952/agent.14952
但是。。。我们的 root ,是可以随意访问的。。。
这里演示一次!
1,用root 连接socket,这里很简单,就执行一句话
# SSH_AUTH_SOCK=/tmp/ssh-jlhtX14952/agent.14952; export SSH_AUTH_SOCK;

2, 查看此 socket 是否已经加入了 private key
# ssh-add -l
1024 fa:2d:87:1a:c5:a6:9d:7c:67:eb:51:a3:6a:7b:49:34 /home/raymond/.ssh/identity (RSA)
看,raymond 的 key 已经加入进去了

3,尝试登录raymond 的服务器,以root 的身份,但使用 raymond 的 key
# ssh raymond@220.181.xxx.xxx
Last login: Sat Mar  6 04:41:55 2010 from 220.181.xxx.xxx
[raymond@VM ~]$ whoami
raymond
看,此时,已经是以raymond 的身份登录的服务器了

多对不同的ssh keys登录同一个用户

先做一个简单的介绍。像我这种系统管理员,远程登录服务器嘛,肯定要用到ssh的。现在,有一点经验的sa都会要求你用ssh key来登录服务器,而不是account和password来登录。为什么呢??

使用用户名和密码去登录服务器,你与服务器之间的通讯数据,并没有加密的,如果你被某人盯上了,他搭一个代理,在你和服务器之间担当一个中间人的角色,那么,你和服务器通讯的所有数据,都会流经他的代理,由于数据并没有加密,这个时候,他就能获取所有你往服务器发送的数据,及服务器返回给你的数据了。

使用ssh key登录有什么不同呢?整个连接过程是这样的,ssh key 生成的时候是一对的,一个叫public key,一个叫private key,就是一对key pair了。ssh 登录服务器时,我就拿着private key,服务器就拿着public key,咱们配对吧,配上了,就让我登录,配不上,就拒绝我了。配上后,我们之间的通讯都加密了,即使真有中间人监听,他拿到的也只是加密后的数据。

废话真多,说正题。

如果,我是A,他是B,我们都拥有自己的ssh key。但现在我们想以同一个用户C的身份登录,是否可以实现呢??

只要把我们的public key append 到C用户的pubilc key 就行了,服务器寻找用户的public key,在/etc/ssh/sshd_config 里配置,默认是/home/C/.ssh/authorized_keys .

cat /home/A/.ssh/authorized_keys >> /home/C/.ssh/authorized_keys

cat /home/B/.ssh/authorized_keys >> /home/C/.ssh/authorized_keys

然后A 就 ssh C@ip 就可以用C用户来登录了,B也同样可以。

其实这个东西,我也是今天才知道的啊@@我一直以为一个人只可以用一对key pair和一个用户名登录,今天一个同事提出可以这样做,我才尝试了一下。我真是火星了!!