引言

本文主要内容:
(1)安装ssh
(2)mac下使用ssh乱码的问题
(3)受限sftp账户管理

1 安装ssh

1.1 Centos下安装ssh

搜索ssh相关软件源:yum search ssh
安装openssh-server:yum install openssh-server

1.2 ubuntu下安装ssh

安装ssh:apt-get install openssh-server
如果出现下列错误:package openssh-server has no installation candidate
可以更新软件源:apt-get upgrade

安装完成后,通过命令查看ssh是否已经运行:ps -e | grep ssh
可以看到进程:sshd

默认为22端口,可以通过下列命令配置:vim /etc/ssh/sshd_config,另外,ubuntu默认Root用户无法访问 ,或访问可以不通过密码,也是修改上述文件,将如下变量配置为:PermitRootLogin yes

启动ssh:/etc/init.d/ssh start,停止:/etc/init.d/ssh stop。如果不能启动,在/etc/hosts里添加本地的ip,再重启机器即可

重启ssh服务:service ssh restart

2 mac下使用ssh乱码

(1)编辑vim ~/.zshrc,输入以下内容:

export LC_ALL=en_US.UTF-8  
export LANG=en_US.UTF-8

(2)查看 locale,显示如下内容:

zLANG="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_CTYPE="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_ALL="en_US.UTF-8"

两边都要这样弄,OK

3 受限sftp账户管理

(1)查看ssh版本:ssh -V
(2)添加用户组:groupadd sftpusers
(3)添加用户并关闭ssh登录功能:seradd -s /bin/false -G sftpusers hehj

如果去尝试登录 #ssh hehj@localhost,则会提示仅支持连接,不支持登录,如下:

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:VXGX1HbDWzQ7UyxZDV4uMq4hGeHnrJPCO7ks/nltFXY.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
hehj@localhost's password:
Permission denied, please try again.
hehj@localhost's password:
This service allows sftp connections only.
Connection to localhost closed.

(4)设置密码:passwd hehj
(5)编辑/etc/ssh/sshd_config,找到Subsystem这个配置项,将其修改为:Subsystem sftp internal-sftp ,然后再到文件最尾处增加配置设定属于用户组sftpusers的用户都只能访问自己的文件夹:

Match Group sftpusers 
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
ChrootDirectory /data/sftp/%u     #需在 /data/sftp/  创建user文件夹,该文件夹就是登录的sftp用户目录

(6)修改user用户所在文件夹的权限,让其属于root用户:# chown root /data/sftp/user
(7)重启sshd服务:# service sshd restart

最终效果:可以在指定目录里上传删除,但是不能修改已经存在的属于root

更多问题,登陆后你会发现你的账号无法切换到除自己本身目录之外的地方,或者登录失败,看下面可能出现的问题; (1)如果在链接服务器的时候出现下面的提示:

Write failed: Broken pipe 
Couldn't read packet: Connection reset by peer 

这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root,权限是750 或者755。解决办法,设置user目录为root权限:# chown root:user /data/sftp/user #chmod 750 /data/sftp/user

(2)Sftp用户登录后不能在本目录操作:
是因为登录后的目录是root权限,需将sftp账号赋予root权限,操作方法将/etc/passwd 文件中对应的sftp的用户ID修改为0, 这样就可以有权限操作登录后的目录了(还有其他赋予权限方法,ps另行查找),Eg:user:x:503:505::/home/darops:/bin/false 将503改为0