一、使用SSHSecureShellClient传文件的步骤是什么
SSH Secure Shell Client是SSH命令行控制终端,你应该是用SSH Secure File Transfer Client传输文件。
这里只谈论他的使用方法,关于SSH配置你再找其他文章。
一、登陆方法
你可以在登陆的SSH Secure Shell Client里单击工具栏里(或菜单)的New File Transfer Window,就直接登陆了。也可以单独运行SSH Secure File Transfer Client。
登陆非常简单,填写Host Name(你的服务器地址或域名),User Name(你的服务器用户名,注意你SSH使用root用户是否有权限登陆,或使用其他用户登陆),Port(你SSH登陆的端口,默认为23)。
二、传输文件
一般默认的SSH Secure File Transfer Client界面左边为你本地的磁盘信息,右边的为登陆后服务器的磁盘信息,确定需要传到服务器的文件,采用拖拽方法,也可以用鼠标右健upload上传。从服务器中下载文件到本地,你也可以用拖拽方法,或用鼠标右键Download下载。
三、注意事项
上传下载,你需要注意用什么方法上传下载,用二进制还是ASCII还是自动,有些时候我们需要指定一下,要不上传文件会有问题。
四、其他
SSH Secure File Transfer Client软件应该没有可选字符集utf8等,在有些linux里中文会出现乱码,你可以用filezilla的sftp,因为filezilla可以选择字符集,就不会有乱码了。你也可以用其他工具参与你的服务器配置。比如WinSCP,在改文件时特别有用,对于vi编辑器不太会用的是很好的替代工具。SecureCRT命令行控制终端可以选择字符集等等。每个工具都有不同的优缺点,结合起来你在维护服务器时才事倍功半。
二、SSH权限详解
原文链接
之前两篇文章利用SSH代理访问内网资源和使用SSH代理在本地开发环境调试各种回调两篇文章,介绍了ssh的各种代理姿势,SSH的功能确实强悍。如果用过ssh代理功能,就有人要问了,我能否限制用户只允许使用代理功能,而不允许用户登录到我的系统中呢?
当然可以!否则又怎么会称为SSH(注:SSH是Secure Shell的缩写)呢?连权限都不能保障怎么敢叫 Secure呢?本篇文章就来详解下SSH的花式权限,来点不一样的干货。
先谈谈SSH有哪些功能,才能谈到每个功能有哪些权限。SSH最常见的有三大功能:
其次是SSH是一个典型的C/S应用,服务端运行 sshd守护进程,监听 TCP/22端口(默认情况下),客户端运行 ssh程序,远程连接 sshd应用,使用以上三种功能。
sshd使用/etc/ssh/sshd_config和~/.ssh/authorized_keys(这个文件仅用于做密钥认证的配置,如果和sshd_config配置冲突则此文件配置生效。此配置文件可以实现细化到密钥的权限,gitlab使用此配置实现用户的ssh访问控制)配置文件做服务配置, ssh客户端使用/etc/ssh/ssh_config(全局配置)和~/.ssh/config(个性配置)两个配置文件(windows 10的openssh使用%USERPROFILE%\.ssh\config)。默认配置文件几乎不用动,ssh就帮我们做好了开箱即用的配置。本文不会讲解ssh每个配置项的含义,只会根据一些场景讲解对应的权限控制,所有场景都是以默认配置为基准,讲解一些常用的配置,一些不常用的配置项就不提及了。
下面我们将详解每个功能的权限
最基本的使用方式,直接远程连接到服务器的shell上,实现远程控制的需求。
只要用户满足以下条件之一,ssh便会拒绝登录:
所以通常创建一个低权限账户,只负责运行本地服务的,使用的useradd命令大致如下:
新用户无密码,并且不是一个合法的shell,所以根本没法登录
如果连motd信息都不想让用户看到,可以直接创建一个~/.hushlogin空文件即可。如果想通过修改配置文件,那么需要同时修改/etc/sshd_config( PrintMotd no)和/etc/pam.d/sshd(去掉 pam_motd.so加载),比较麻烦。
设置 PermitRootLogin选项即可。 no表示彻底拒绝root远程登录,想要切换成root就只能通过普通用户的 su-或 sudo-i切换root身份了。 prohibit-password和 without-password(Ubuntu 14.04以后默认)表示拒绝密码登录,表示只能通过密钥登录了。 forced-commands-only选项表示只允许密钥认证,但是必须给定 command,也就是非交互式执行ssh。
这个其实办法很多,比如在防火墙控制,在/etc/hosts.(deny|allow)控制等,其实在/etc/sshd_config也可以控制,方法就是使用 Match address,比如:
用sshd配置本身做ip白名单的比较少,但是 Match配置却是一个非常有用的配置项,它可以实现我们对用户或用户组区别对待,这个我们会在后面再细说。
有关代理的使用可以参考我之前写的利用SSH代理访问内网资源和使用SSH代理在本地开发环境调试各种回调两篇文章。
x11转发功能实际应用会非常罕见,作用是将远程的图形数据在本地的X server上展示,以实现本地操作远程图形程序的功能。首先是Linux服务器大多运行在无图形环境下,本身就没有图形化程序跑在上面,再加上客户机可能多数是windows,又没有X环境,更加限制了这个功能的使用。还有就是x11 forwarding性能不是很好,实际使用会发现非常卡,不适合使用那种对响应速度要求比较灵敏的应用程序,比如浏览器,在x11 forwarding下运行动图会非常卡。最后就是需要跑图形化程序的服务器多数都安装有桌面环境,配置有vnc,因此就更没有人愿意使用这个功能了。
如果不希望所有端口都能用于转发请求,可以配置 PermitOpen参数:
如果允许多个端口用于转发,那么必须一个个配置出来, any(默认)表示所有端口都允许用于转发。
这个比较繁琐,因为目前常见的通过ssh传输文件的有三个命令 scp, rsync, sftp。它们的机制不一样,其中 scp和 rsync是通过远程非交互式执行命令实现的,而 sftp是通过openssh的sftp server实现的。
对于 scp和 rsync,只需要限制非交互式命令就可以了,比如
或在~/.ssh/authorized_keys对应的rsa public key前面加上 command="/bin/bash"(参考gitlab的/var/opt/gitlab/.ssh/authorized_keys),效果是等效的。这样就可以实现允许用户远程登录系统,但是 scp和 rsync命令失效,同时由于限定死了command参数,导致你的非交互式ssh命令也无法使用了,比如 ssh user@ip ls/这一类非交互式ssh不起作用了。
但是对于 sftp的限制则要容易的多,因为 sftp权限是单独分开的,不和ssh命令执行权限混在一起,并且sftp也和ftp一样,有自带的一些命令实现(比如ls, cd, get, put等等),如果设置
或等效的~/.ssh/authorized_keys配置,则表示只允许使用sftp,不允许shell登录。如果配置中去掉 Subsystem sftp/usr/lib/openssh/sftp-server这一行就可以关闭sftp服务
经常时候我们需要混合以上各种权限使用。比如某些用户我们开放出来,但是限制它的功能,此时 Match配置就是我们的好朋友了。
由于用户不能登录shell,不能使用密码认证,因此想要使用代理,必须使用类似于下面的命令:
使用-i参数指定私钥文件用于公钥认证,使用-N参数表示不执行远程命令,仅仅使用port forwarding。
这里我们Match了 sftp-only这个组,在这个组下面的用户都使用下面的配置。使用了ForceCommand,因此不能登录shell,使用了 ChrootDirectory限制了用户的根目录,关闭了各种转发功能。
通过 Match的组合,我们可以很方便的限制一些特定用户的权限,这样就实现了ssh用户的一些特殊化管理。
这里只是按照一些可能遇到的场景讲解了下 sshd_config的配置,对于等效的~/.ssh/authorized_keys配置同样适用。其实ssh还有很多强大的功能,但是用的可能比较少,这里就不详细讲解那些不太常见的参数了,有兴趣的读者可以自行查阅man手册获取更多资料:
三、SSH客户端之SSH Secure Shell 的连接方法
1、运行环境
WINDOWS下安装SSH客户端,名字是SSHSecureShellClient-3.2.9.exe,可以到http://www.ssh.com/下载,当然了,在SERVER端我们也可以安装Openssh,但此文章着重介绍的是ssh的技术,所以我们使用的是http://www.ssh.com/ for UNIX/LINUX的SERVER端,现在最新版本是ssh-3.2.9-1.i386.rpm(如果你是AIX或者SOLARIS,要下不同的版本,这里以RHCE3为例子)。确定把UNIX类主机的默认的Openssh全部卸载掉后安装ssh-3.2.9-1.i386.rpm。
2、为什么要公私钥认证方法(连接到主机不输入密码)
我们需要知道Publick Key是指公钥,而private key是指私钥。认证的过程是这样的:public key对数据进行加密而且只能用于加密,private key只能对所匹配的public key加密过的数据进行解密。我们把public key放在远程系统合适的位置,然后从本地开始进行ssh连接。此时,远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地,本地会用private key进行解密并把这个随机数发回给远程系统。最后,远程系统的sshd会得出结论——我们拥有匹配的private key允许我们登录。就这么简单!
3、在本机生成密钥过程
WINDOWS下寻找ssh-keygen2.exe文件,这是生成密钥的文件,我的在C:/Program Files/SSH Communications Security/SSH Secure Shell,在DOS下执行这个文件,方法是
C:/Program Files/SSH Communications Security/SSH Secure Shell ssh-keygen2-t rsa
我用的是rsa的密钥,默认是2048位,足够我们用的了,还可以使用dsa方式的密钥。我就不在这里说明了
系统自动生成密钥对,默认放在C:/Documents and Settings/XXX/Application Data/SSH/UserKeys目录下,其中XXX是你执行程序时用的帐户,默认名称是id_rsa_2048_a和id_rsa_2048_a.pub,而后者就是我们要传到服务器上的公钥。(生成密钥对的同时让你输入一个密码,因为我们想不输入密码直接登陆服务器,所以就直接回车了,但如果你想更安全一些,还是建议你在这里也输入密码。)
4、用SSH客户端从本机登陆到远程UNIX类服务器上
我们还按以前的方法登陆到远程UNIX类服务器上,这样登陆后我们会在用户目录下,PWD一下,你可以看到你的用户目录路径,比如我的就是/home/test,那么好了,我们建立一个.ssh2的文件夹,在里面建立一个文件,authorization,内容如下:
key id_rsa_2048_a.pub
然后把你WINDOWS客户端上的id_rsa_2048_a.pub上传到你在UNIX类服务器上刚建立好的.ssh2文件夹下,关闭SSH客户端。
5、用SSH客户端公钥认证状态登陆
重新启动SSH客户端,在登陆认证状态栏选择Public Key方式,登陆到你刚才放id_rsa_2048_a.pub的那台服务器,你会发现你马上就登陆进来了,没有密码限制了。这个时候用公私钥认证和用密码认证同时存在,还没有达到我们的要求,那我们就在UNIX类服务器上修改/etc/ssh2/sshd2_config文件
把以下如下三行的password删除,下面这三行是修改好的
AllowedAuthentications publickey
AllowedAuthentications hostbased,publickey
RequiredAuthentications publickey
这样当你再用密码登陆的时候就出现如下对话框了!!
第二章 SSH客户端之Putty的连接方法
1、运行环境
WINDOWS下安装的SSH客户端,名字是putty-0.56-installer.exe,可以到如下地址下载:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html,这个安装包是所有工具的**,其实如果只做为连接用,你可以只下putty0.56.exe的。但我们这里因为要做密钥对,所以就下整个包安装吧。
2、在本机生成密钥过程
用putty套装的puttygen来产生密钥。密钥的类型选择SSH2 RSA。密钥的位数选择2048,然后点击"Generator",此时密钥生成当然也有几个选项出现。如果你有不止一个key,你可以在“Key comment”作注释用于区别其他的key。“Key passphrase“和“Confirm passphrase“用于对硬盘上的key进行加密,如过你自己一个人用机器觉得安全有保障的话可以让它们为空。然后保存两个key,用默认方式保存,那么公钥你可以指定文件名,私钥默认的文件扩展名是.ppk。在这里我们命名它为test.ppk,而公钥我们保存为test.pub,需要注意的是,如果用putty连接,私钥的扩展名必须是.ppk,而且你还可以将这个.ppk的私钥保存为SSH Secure Shell格式和Openssh格式认知的私钥,这个对两个UNIX类主机之间相互通信提供了很大帮助。(我们以后会将两个UNIX类主机通过公私钥认证的方法给大家讲讲)
4、用Putty从本机登陆到远程UNIX类服务器上
我们还按先前的方法登陆到远程UNIX类服务器上,这样登陆后我们会在用户目录下,PWD一下,你可以看到你的用户目录路径,比如我的就是/home/test,那么好了,我们建立一个.ssh2的文件夹,在里面建立一个文件,authorization,内容如下:
key test.pub
然后把你WINDOWS客户端上的test.pub上传到你在UNIX类服务器上刚建立好的.ssh2文件夹下,关闭Putty。这个上传命令你可以用 put,下载就用get。你的通道可以用PSFTP建立,这个也在PUTTY的组件中。
5、用SSH客户端公钥认证状态登陆
重新启动Putty,建立一个session命名为test,设定你要登陆的远程ip,协议设为ssh,Connection设定在ssh的auth选项中,将private key的文件选择为刚才我们由puttygen产生的密钥test.ppk。点Open,要求输入username,我们输入用户名后远程系统开始public key认证,如果密钥有passphrase则需要输入,否则直接就登录了。这个时候用公私钥认证和用密码认证同时存在,还没有达到我们的要求,那我们就在UNIX类服务器上修改/etc/ssh2/sshd2_config文件
把以下如下三行的password删除,下面这三行是修改好的
AllowedAuthentications publickey
AllowedAuthentications hostbased,publickey
RequiredAuthentications publickey
这样当你再用密码登陆的时候就出现如下对话框了!!
第三章
Ssh服务器端安装
1、环境:
因为我们选用的SSH服务器是http://www.ssh.com的SSH Secure Shell for unix类产品,所以我们主要介绍一下此类的Ssh服务器的安装过程。(SSH有两个版本,我们现在介绍的是版本2;Openssh就不介绍了,大家有兴趣的话可以参考一下网上文章)
2、编译安装
我们前面介绍过,现在的Ssh server for unix类的最新版本是ssh-3.2.9-1,我建议大家用官方提供的TAR包,当然,如果你不熟悉编译过程,用RPM等安装方式也是可以的。如果用RPM安装,请先下载ssh-3.2.9-1.i386.rpm,大家可以到以下地址下载:
http://ftp.ssh.com/priv/secureshell/329wks+srv-lt49ldrk/linux/ssh-3.2.9-1.i386.rpm
安装时请用管理员权限
# rpm–ivh ssh-3.2.9-1.i386.rpm如果是升级安装那参数就用–Uvh
而3.2.9-1的TAR包大家可以到http://downloads.planetmirror.com/pub/ssh/ssh-3.2.9.1.tar.gz下载。安装时也使用管理员权限:
# tar xzvf ssh-3.2.9.1.tar.gz
# cd ssh-3.2.9.1
#./configure(这里我们要说明一下,原来有些文档写如果你希望用tcp_wrappers来控制SSH,那么在configure时需要加上选项“--with-libwrap=/path/to/libwrap/”,用来告诉SSH关于libwrap.a和tcpd.h的位置,但3.2.0以上的SSH已经不需要这么麻烦了,它们已经内置了控制访问权限的功能。)
# make; make install; make clean
这样就结束了安装。
3、简单配置Ssh server
无论你是用RPM或TAR包安装的ssh server,它的配置文件都在/etc/ssh2/sshd2_config,安装完后一般不用配置它,但如果你的22端口在安装ssh server之前已经被其他程序占用,那么你需要简单的配置一下这个文件,执行 vi/etc/ssh2/sshd2_config,找到第27行,Port 22,把22改成其他的端口就可以了。
4、启动Ssh server
Ssh server的默认启动文件是/usr/local/**in/sshd2,而安装程序自动做了一个连接到这个文件的名字为sshd的文件,我们只要在/usr/local/**in/目录中执行./sshd就可以简单的启用Ssh server,然后我们执行# netstat–na会看见22端口已经被监听了(你的可能是其他端口,具体看你在sshd2_config文件中的设置了。)但我们不想每次都要手动启动Ssh server,那么我们可以修改一下/etc/rc.d/rc.local文件,在这个文件的最后加入以下内容:
#start ssh
/usr/local/**in/sshd
其中第一行为注释内容,第二行为启动SSH服务器并作为后台守护进程运行。
这样就好了,系统重起时可以自动启动SSH服务,但是启动后你如果在服务器端插上显示器,会在最后该登陆的时候看到一行字,意思就是Ssh server服务启动了,我比较挑剔,不想看到这个提示,而且我想把Ssh服务放到LINUX服务启动过程中,这样比较美观一点。那么我们就不能修改/etc/rc.d/rc.local文件,我们要进入/etc/init.d/中建立一个SHELL文件,名字就叫sshd内容如下:
#!/bin/bash
cd/usr/local/**in
./sshd
然后给这个文件加上可执行权限
# chmod+x sshd
然后进入/etc/rc3.d,做一个软链接文件
# cd/etc/rc3.d
# ln-s../init.d/sshd S13sshd
这样就达到了我的要求,好了,Ssh server的安装就介绍到这里吧,安装是很简单的,希望大家编译安装成功。
非常感谢您的阅读!我们希望本文对于解决您关于SSH (Secure Shell)详解的问题提供了一些有价值的信息。如果您还有其他疑问,我们将很乐意为您提供进一步的帮助。