openssh远程连接_通过OpenSSH在UNIX中设置远程访问关于本系列
典型的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.使⽤通⽤构建序列
$ ./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)。 例如, 显⽰了如何创建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.使⽤-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.创建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.已知主机⽂件
$ 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。 例如,请参见在远程主机上运⾏who命令。
清单6.在远程主机上运⾏who命令
$ ssh mc@remotehost who
admin    console  Nov 23 14:04
mc      ttyp1    Dec  2 10:53 (slp.pri)
mc      ttyp2    Dec 10 06:50 (slp.pri)
admin    ttyp3    Dec 12 13:33
mc      ttyp4    Dec 15 12:38 (slp.p)
远程执⾏还模拟客户端主机的标准输⼊,输出和错误。 这意味着您可以将输出重定向到远程命令。 例如,您可以通过将命令的输出传递给远程主机上的SSH,将信息直接附加到远程⽂件中(请参见 )。
清单7.将信息直接附加到远程⽂件
ssh工具安卓下载$ echo "Hello World" |ssh mc@remotehost 'cat >> '
使⽤SSH简化登录过程时,可以利⽤此功能。
使⽤SFTP交换⽂件
sft命令是类似FTP的替代⽅法,它使⽤SSH协议提供的安全通信通道。
要打开SFTP连接,请在命令⾏上指定主机名:
$ sftp remotehost
请记住,上⼀条命令假定您要使⽤与当前主机相同的登录名。 要使⽤其他登录名,请在⽤户名前添加主机名:
$ sftp mc@remotehost
尽管SFTP的⼯作⽅式与FTP类似,但存在⼀些限制和差异。 例如,FTP中的dir提供了很长的⽂件列表(请参见 )。
清单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. dir仅在SFTP中提供⼀⼩段清单
sftp> dir
Desktop    Documents  Library    Movies    Music      Pictures  Public
Sites      tmp        trial
对于长清单,请使⽤与ls相同的选项(请参见 )。
清单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.创建密钥
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
您应该输⼊要保存密钥的⽂件的位置(公共组件和私有组件)。 通常使⽤默认值(在主⽬录中的.ssh⽬录中)(请参见 )。
清单12.提⽰输⼊密码
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
如果在此阶段输⼊密码,则将创建⼀个安全密钥⽂件,但每次使⽤密钥时也必须输⼊密码。 按Return键意味着不需要密码(请参见 )。清单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