关于本系列
典型的UNIX®管理员经常使用一系列重要的实用程序,技巧和系统,以协助管理过程。 有一些关键实用程序,命令行链和脚本可用来简化不同的过程。 这些工具中的一部分随操作系统一起提供,但是大多数技巧来自多年的经验以及减轻系统管理员生活的渴望。 本系列的重点是从各种不同UNIX环境中的可用工具中获取最大收益,包括简化异构环境中管理的方法。
为什么要使用OpenSSH?
您每天使用的标准网络服务(例如FTP,Telnet,RCP,远程外壳程序(rsh)等)在封闭环境中都可以使用,但是使用这些服务中的任何一项通过网络传输的信息都是未加密。 在网络或远程计算机上具有数据包嗅探器的任何人都可以在交换信息时查看信息,有时甚至可以查看密码信息。
此外,对于所有这些服务,在过程中自动登录的选项受到限制,并且通常依赖于将纯文本密码嵌入命令行中以执行语句,从而使过程更加不安全。
开发了安全外壳(SSH)协议来解决这些限制。 SSH提供对整个通信通道的加密,包括登录名和密码凭据交换,并且可以与公用密钥和专用密钥一起使用,以提供登录的自动身份验证。 您还可以将SSH用作基础传输协议。 以这种方式使用SSH意味着,一旦打开安全连接,加密通道便可以使用相同的安全通信机制交换所有类型的信息,甚至包括HTTP和SMTP。
OpenSSH是SSH 1和SSH 2协议的免费实现。 它最初是作为OpenBSD(伯克利软件发行)操作系统的一部分开发的,现在已作为UNIX或Linux®及类似操作系统的通用解决方案发布。
安装OpenSSH
OpenSSH是免费软件,可以从OpenSSH主网站下载(请参阅参考资料 )。 可以从包括Linux,HP-UX,AIX®,Solaris,Mac OS X等许多系统的源代码中构建OpenSSH系统。 您通常可以找到针对所选平台和版本的预编译二进制文件。 一些供应商甚至提供OpenSSH套件作为操作系统的一部分。
要构建,您需要以下内容:
- C编译器(GNU C编译器(gcc)或类似版本)
- Zlib-压缩库
- OpenSSL-安全套接字层(SSL)安全性库
如果要使用默认配置设置,则可以使用通用的构建顺序,如下面的清单1所示。
清单1.使用通用构建序列
$ ./configure
$ make
$ make install
这会将二进制文件,库和配置文件安装到/ usr / local目录中,例如,/ usr / local / bin用于二进制文件,/ usr / local / etc用于配置文件。 如果要将工具集成到主环境中,则可能需要指定--prefix
选项(用于设置基本目录)和--sysconfdir
选项(用于设置配置文件的位置):
$ ./configure --prefix=/usr --sysconfidir=/etc/ssh
您可能指定的其他一些常见选项包括:
-
--with-tcp-wrappers
如果要与TCP包装安全系统集成,则需要此选项。 -
--with-ssl-dir=DIR
此选项指定OpenSSL库的位置。 -
--with-pid-dir=DIR
此选项指定PID文件的位置,该文件存储sshd守护程序的进程ID。 -
--with-xauth=DIR
此选项指定用于X认证的xauth
命令的位置。
配置完成后,使用make
正常构建。
在完成构建和安装过程之后,您需要配置系统,首先要创建可唯一标识系统并启用客户端与主机之间安全通信的SSH密钥。 您可以运行:
$ make host-key
或者,您可以在命令行上手动执行这些步骤。 您需要创建三个密钥(每个主要加密算法一个密钥:rsa1,rsa和dsa)。 例如, 清单2显示了如何创建rsa1密钥。
清单2.创建一个rsa1密钥
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key
Generating public/private rsa1 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /etc/ssh//ssh_host_key.
Your public key has been saved in /etc/ssh//ssh_host_key.pub.
The key fingerprint is:
43:aa:58:3c:d8:30:de:43:af:66:2a:b2:8d:02:08:86 root@remotehost
系统提示您输入密码。 对于主机密钥,您可能不需要密钥密码,因此只需按Return键即可使用空白(空)密码短语。 另外,您可以通过在命令行上使用-N
选项来加快此过程(请参见清单3 )。
清单3.使用-N
选项加速该过程
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N ""
Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
a3:e3:21:4f:b5:9f:ff:05:46:66:bc:36:a1:47:a0:64 root@remotehost
现在重复创建rsa和dsa密钥的过程(请参见清单4 )。
清单4.创建rsa和dsa密钥
$ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
$ ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ""
每种密钥类型都会创建两个文件:公共密钥(以.pub结尾的文件)和私有密钥。 您应该确保私钥只能由root和SSH进程读取-应该自动配置。 您可能需要将公用密钥复制到网络文件系统(NFS)共享上的中央位置,以使人们可以将公用密钥添加到已知主机密钥列表中。
最后,您需要启动sshd进程并将其配置为在引导时执行。 对于Linux主机,可以在contrib / redhat / sshd.init中找到可以添加到/etc/init.d中的合适的初始化脚本。
使用SSH进行基本的终端访问
OpenSSH的主要角色是SSH工具,它提供了Telnet协议的安全替代方案,用于远程登录UNIX或Linux主机。
要使用标准外壳连接到远程主机,您只需键入主机名:
$ ssh remotehost
默认情况下,系统尝试使用您的当前用户名作为登录名。 要使用其他登录名,请在主机名前添加前缀,并用@符号将二者分开。 例如:
$ ssh mc@remotehost
系统提示您输入用户密码-就像Telnet。
首次连接到主机时,系统会询问您是否要在“已知主机”文件中保留远程主机公钥的副本(请参见清单5 )。
清单5.已知主机文件
$ ssh root@remotehost
The authenticity of host 'remotehost (10.211.55.3)' can't be established.
RSA key fingerprint is cc:c8:8b:75:3d:b6:00:2f:a9:9c:53:4c:03:0f:3d:1b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'remotehost' (RSA) to the list of known hosts.
将来,您将不会收到此警告,但是如果系统检测到远程主机返回的公钥与该主机上已归档的公钥之间存在差异,则会发送警告。潜在的黑客尝试。 这也可能意味着管理员仅重新生成了主机密钥。
本质上,SSH和Telnet会话之间没有区别,只是SSH会话是加密的,因此几乎没有人可以窥探您的会话并确定您的密码或正在执行的命令和操作。
您也可以使用SSH直接在远程主机上运行命令,而不必使用Shell。 例如,请参见清单6在远程主机上运行who
命令。
清单6.在远程主机上运行who命令
$ ssh mc@remotehost who
admin console Nov 23 14:04
mc ttyp1 Dec 2 10:53 (sulaco.mcslp.pri)
mc ttyp2 Dec 10 06:50 (sulaco.mcslp.pri)
admin ttyp3 Dec 12 13:33
mc ttyp4 Dec 15 12:38 (nautilus.mcslp.p)
远程执行还模拟客户端主机的标准输入,输出和错误。 这意味着您可以将输出重定向到远程命令。 例如,您可以通过将命令的输出传递给远程主机上的SSH,将信息直接附加到远程文件中(请参见清单7 )。
清单7.将信息直接附加到远程文件
$ echo "Hello World" |ssh mc@remotehost 'cat >> helloworlds.txt'
使用SSH简化登录过程时,可以利用此功能。
使用SFTP交换文件
sft
命令是类似FTP的替代方法,它使用SSH协议提供的安全通信通道。
要打开SFTP连接,请在命令行上指定主机名:
$ sftp remotehost
请记住,上一条命令假定您要使用与当前主机相同的登录名。 要使用其他登录名,请在用户名前添加主机名:
$ sftp mc@remotehost
尽管SFTP的工作方式与FTP类似,但存在一些限制和差异。 例如,FTP中的dir
提供了很长的文件列表(请参见清单8 )。
清单8. dir提供了FTP中文件的一长串
ftp> dir
502 'EPSV': command not understood.
227 Entering Passive Mode (192,168,0,110,150,159)
150 Opening ASCII mode data connection for directory listing.
total 1472
drwx------ 3 mc staff 102 Nov 4 11:17 Desktop
drwx------ 3 mc staff 102 Nov 4 11:17 Documents
drwx------ 18 mc staff 612 Nov 5 18:01 Library
drwx------ 3 mc staff 102 Nov 4 11:17 Movies
drwx------ 3 mc staff 102 Nov 4 11:17 Music
drwx------ 4 mc staff 136 Nov 4 11:17 Pictures
drwxr-xr-x 4 mc staff 136 Nov 4 11:17 Public
drwxr-xr-x 6 mc staff 204 Nov 4 11:17 Sites
drwxrwxrwx 3 root staff 102 Dec 24 07:30 tmp
drwxr-xr-x 7 root staff 238 Dec 11 08:39 trial
226 Transfer complete.
在SFTP中, dir
用作hosts directory listing命令的别名,在UNIX或Linux上为ls
。 默认情况下, dir
仅提供一个简短清单(请参见清单9 )。
清单9. dir仅在SFTP中提供一小段清单
sftp> dir
Desktop Documents Library Movies Music Pictures Public
Sites tmp trial
对于长清单,请使用与ls
相同的选项(请参见清单10 )。
清单10.详细清单
sftp> dir -l
drwx------ 3 mc staff 102 Nov 4 11:17 Desktop
drwx------ 3 mc staff 102 Nov 4 11:17 Documents
drwx------ 18 mc staff 612 Nov 5 18:01 Library
drwx------ 3 mc staff 102 Nov 4 11:17 Movies
drwx------ 3 mc staff 102 Nov 4 11:17 Music
drwx------ 4 mc staff 136 Nov 4 11:17 Pictures
drwxr-xr-x 4 mc staff 136 Nov 4 11:17 Public
drwxr-xr-x 6 mc staff 204 Nov 4 11:17 Sites
drwxrwxrwx 3 root staff 102 Dec 24 07:30 tmp
drwxr-xr-x 7 root staff 238 Dec 11 08:39 trial
其他命令,更改目录(本地为cd
和lcd
),创建目录( mkdir
)以及发送( put
)和接收( get
)文件均保持不变。 对于后一个命令, put
和get
都接受通配符(例如FTP中的mput
和mget
),但是在SFTP中传输多个没有通配符的文件时要小心。 例如,将sftp> mget file1 file2 file3
标识为尝试获取file1和file2并将它们放入本地目录file3的尝试,该目录可能不存在。
使用scp在主机之间复制文件
除了使用SSH协议传输文件外, scp
命令的工作方式类似于rc
命令。 当传输内容敏感文件或通过Internet自动交换文件时,这使scp
成为更好的选择。
格式类似于rcp
; 您可以指定在将主机名合并到路径之间的文件路径副本。 例如,要将.bashrc文件从remotehost复制到本地计算机,请使用:
$ scp remotehost:/users/mc/.bashrc ~/.bashrc
和以前一样,要指定要使用的用户名,请在主机名前添加用户名和@符号:
$ scp mc@remotehost:/users/mc/.bashrc ~/.bashrc
〜元字符也应该可以从主目录访问信息,前提是您要用来连接的用户有权读取它:
$ scp mc@remotehost:~mc/.bashrc ~/.bashrc
要从您以其身份登录的用户的主目录中进行复制,请使用:
$ scp mc@remotehost:.bashrc ~/.bashrc
scp
命令还支持标准扩展规则。 因此,要复制所有.bash *文件,可以使用:
$ scp mc@remotehost:.bash* ~
或者,您甚至可以更具体一些,并使用大括号({})扩展来选择单个文件:
$ scp mc@remotehost:".bash{rc,_path,_aliases,_vars}" ~
请注意,文件路径的括号扩展(而不是完整的远程路径表达式)已用双引号引起来。
在上述所有情况下,系统都会提示您输入远程主机的密码。 您可以通过为主机提供您自己的个人密钥的公共部分来避免这种情况。
使用公钥启用自动登录
使用ssh
, sftp
或scp
登录到远程系统时,仍然需要使用密码来完成登录过程。 通过创建公用密钥或专用密钥并将密钥的公共部分提供到〜/ .ssh / authorized_keys文件中,与远程站点交换了有效密钥后,就可以消除此要求并允许自动登录。
要创建公钥或私钥,您需要使用ssh-keygen
,指定密钥加密的类型。 在演示中使用了rsa
密钥类型,但其他密钥类型也有效。 请参见清单11创建密钥。
清单11.创建密钥
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
您应该输入要保存密钥的文件的位置(公共组件和私有组件)。 通常使用默认值(在主目录中的.ssh目录中)(请参见清单12 )。
清单12.提示输入密码
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
如果在此阶段输入密码,则将创建一个安全密钥文件,但每次使用密钥时也必须输入密码。 按Return键意味着不需要密码(请参见清单13 )。
清单13.通过按回车键来绕过密码要求
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
98:da:8d:48:a8:09:44:b1:b3:62:51:2d:a9:6b:61:ba root@remotehost
已创建一个公钥(id_rsa.pub)和相应的私钥(id_rsa)。
要启用自动登录,必须将公用密钥的内容复制到远程主机的〜/ .ssh目录中的authorized_keys文件中。 您可以使用SSH自动执行此操作(请参见清单14 )。
清单14.启用自动登录
$ cat ./.ssh/id_rsa.pub | ssh mc@remotehost 'cat >> .ssh/authorized_keys';
更好的是,如果您经常在一系列主机上执行此操作,则可以使用一个小的脚本或shell函数来为您执行所有必需的步骤,如清单15所示。
清单15.使用shell脚本启用自动登录
OLDDIR='pwd';
if [ -z "$1" ]; then
echo Need user@host info;
exit;
fi;
cd $HOME;
if [ -e "./.ssh/id_rsa.pub" ]; then
cat ./.ssh/id_rsa.pub | ssh $1 'cat >> .ssh/authorized_keys';
else
ssh-keygen -t rsa;
cat ./.ssh/id_rsa.pub | ssh $1 'cat >> .ssh/authorized_keys';
fi;
cd $OLDDIR
使用setremotekey脚本,您可以复制现有密钥,或者如果尚不存在,则在复制之前创建一个密钥:
$ setremotekey mc@remotehost
现在,每当您需要使用公共密钥登录到远程主机时,都可以将个人密钥的脚本与远程主机上用户的可接受密钥列表一起使用。
摘要
OpenSSH是一种重要的工具,可确保计算机之间的通信和信息传输安全。 它不仅可以为Telnet,FTP和RCP等常用工具提供安全的替代方案,而且还可以充当Subversion,X Windows System和rsync等其他服务的传输协议。 在本文中,您了解了启动和运行所需的基本步骤,如何充分利用OpenSSH提供的主要工具以及如何使用密钥交换工具来简化登录和连接问题。 。
翻译自: https://www.ibm.com/developerworks/aix/library/au-satopenssh.html