Posts Tagged: sshd


8
十 11

authorized_keys文件中的command选项

通常我们只是将authorized_keys当作公钥文件来用,其实这个文件还有更丰富的功能。
通过sshd的手册,可以查到关于authorized_keys文件的格式介绍,远不止“ssh-dss AAAA* buser@bsdmap.com”这样简单,比如功能强大的command配置项。
这个选项常用来让某个特定的公钥执行特定的任务。比如仅仅将某一个公钥用于执行备份任务。
举两个常见例子:
1. rsync
服务器端的key为:

command="rsync --server  --sender -vlogDtprCz . /mnt/one/" ssh-dss AAAAB3...sYBat4= user@deckard.example.com

这样,客户端就可以使用下面的命令,通过key认证来同步目录了:

rsync -e 'ssh -i pris -l deckardsync' -Cavz /home/user/two/ pris:/mnt/three

2.svnserve

在服务端增加:

command=”/usr/bin/svnserve -t -r /var/svn-repos/ –tunnel-user=svnuser”,no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding

客户端:

svn import web svn+ssh://192.168.1.10/topcity -m “initial import”

 

参考:
http://lamp.linux.gov.cn/OpenSSH/sshd.html#end
http://ramblings.narrabilis.com/wp/using-rsync-with-ssh/

http://hi.baidu.com/farmerluo/blog/item/9006a4c2a679380b0ff4776e.html


22
二 10

最小化权限的ssh账号-只能使用TCP转发

建立只能使用ssh“转发”功能的系统账户

为了满足“翻墙”的需要,在国外的Linux主机上(比如 DreamHost )上建个可 ssh登录的用户,使用 ssh 的 Tunnel 来作代理是十分常见的方法。

但是主人往往又想最小化用户权限,以避免对系统造成影响。最简单的办法就是,禁止用户登录。

其实 ssh 可以连接到 sshd 但是不执行远程命令(默认是启动用户设定的 shell ),使用 -N 参数即可。

在服务器上建一个 username :
添加用户:useradd -s /bin/false  username,将用户的shell设置成/bin/false。这样用户就无法与系统进行交互。
设置密码:passwd username

小技巧:
也可以使用 /usr/bin/passwd 作为用户的 shell ,这样用户就可以通过登录而来自主修改密码。需要注意的是,需要将 /usr/bin/passwd 这一行写进 /etc/shells文件。
sshd 认证通后之后,会检查设定的 shell 是否登记在 /etc/shells 文件中,若已经登记,则fork自己,然后fork出来的子进程再exec 设定的 shell 。而 ssh 的 -N 参数,则是告诉 sshd 不需要执行 shell。

建立Tunnel:

ssh -D 1080 -qfnN    username@hostname

输入密码即可使用(也可以用key认证)。

Windows的话,可以使用plink.exe或者MyEnTunnel(MyEnTunnel 本质上也是使用plink.exe来建立Tunnel)。

此时账号username 可以通过sshd的认证使用 TcpForwarding ,但是不能运行 shell,不能与系统交互。刚好可以用来为朋友提供国外的代理翻墙。

参数详解:
-D 1080 建立动态Tunnel,监听在本地1080端口。
-q  安静模式。
-f   ssh在后台运行,即认证之后,ssh退居后台。
-n  将 stdio 重定向到 /dev/null,与-f配合使用。
-N  不运行远程程序。即通知 sshd 不运行设定的 shell。