- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SSH使用指南由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的"通道".
统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到"中间人"(man-in-the-middle)这种方式的攻击。所谓"中间人"的攻击方式,就是"中间人"冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被 "中间人"一转手做了手脚之后,就会出现很严重的问题.
最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH.
SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x.
SSH的安全验证是如何工作的 。
从客户端来看,SSH提供两种级别的安全验证.
第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到"中间人"这种方式的攻击.
第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密"质询"(challenge)并把它发送给客户端软件。客户端软件收到"质询"之后就可以用你的私人密匙解密再把它发送给服务器.
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令.
第二种级别不仅加密所有传送的数据,而且"中间人"这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒.
安装并测试OpenSSH 。
因为受到美国法律的限制,在很多Linux的发行版中都没有包括OpenSSH。但是,可以从网络上下载并安装OpenSSH(有关OpenSSH的安装和配置请参考:http://www.linuxaid.com.cn/engineer/brimmer/html/OpenSSH.htm).
安装完OpenSSH之后,用下面命令测试一下:
ssh -l [your accountname on the remote host] [address of the remote host] 。
如果OpenSSH工作正常,你会看到下面的提示信息:
The authenticity of host [hostname] can't be established. 。
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52. 。
Are you sure you want to continue connecting (yes/no)?
OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入"yes"。这将把这台主机的"识别标记"加到"~/.ssh/know_hosts"文件中。第二次访问这台主机的时候就不会再显示这条提示信息了.
然后,SSH提示你输入远程主机上你的帐号的口令。输入完口令之后,就建立了SSH连接,这之后就可以象使用telnet那样使用SSH了.
SSH的密匙 。
生成你自己的密匙对 。
生成并分发你自己的密匙有两个好处:
1) 可以防止"中间人"这种攻击方式 。
2) 可以只用一个口令就登录到所有你想登录的服务器上 。
用下面的命令可以生成密匙:
ssh-keygen 。
如果远程主机使用的是SSH 2.x就要用这个命令:
ssh-keygen -d 。
在同一台主机上同时有SSH1和SSH2的密匙是没有问题的,因为密匙是存成不同的文件的.
ssh-keygen命令运行之后会显示下面的信息:
Generating RSA keys: ............................ooooooO......ooooooO 。
Key generation complete. 。
Enter file in which to save the key (/home/[user]/.ssh/identity)
[按下ENTER就行了] 。
Created directory '/home/[user]/.ssh'. 。
Enter passphrase (empty for no passphrase)
[输入的口令不会显示在屏幕上] 。
Enter same passphrase again
[重新输入一遍口令,如果忘记了口令就只能重新生成一次密匙了] 。
Your identification has been saved in /home/[user]/.ssh/identity. 。
[这是你的私人密匙] 。
Your public key has been saved in /home/[user]/.ssh/identity.pub. 。
The key fingerprint is: 2a:dc:71:2f:27:84:a2:e4:a1:1e:a9:63:e2:fa:a5:89 [user]@[local machine] 。
"ssh-keygen -d"做的是几乎同样的事,但是把一对密匙存为(默认情况下)"/home/[user]/.ssh/id_dsa"(私人密匙)和"/home/[user]/.ssh/id_dsa.pub"(公用密匙).
现在你有一对密匙了:公用密匙要分发到所有你想用ssh登录的远程主机上去;私人密匙要好好地保管防止别人知道你的私人密匙。用"ls -l ~/.ssh/identity"或"ls -l ~/.ssh/id_dsa"所显示的文件的访问权限必须是"-rw-------".
如果你怀疑自己的密匙已经被别人知道了,不要迟疑马上生成一对新的密匙。当然,你还要重新分发一次公用密匙.
分发公用密匙 。
在每一个你需要用SSH连接的远程服务器上,你要在自己的家目录下创建一个".ssh"的子目录,把你的公用密匙"identity.pub" 拷贝到这个目录下并把它重命名为"authorized_keys"。然后执行:
chmod 644 .ssh/authorized_keys 。
这一步是必不可少的。如果除了你之外别人对"authorized_keys"文件也有写的权限,SSH就不会工作.
如果你想从不同的计算机登录到远程主机,"authorized_keys"文件也可以有多个公用密匙。在这种情况下,必须在新的计算机上重新生成一对密匙,然后把生成的"identify.pub"文件拷贝并粘贴到远程主机的"authorized_keys"文件里。当然在新的计算机上你必须有一个帐号,而且密匙是用口令保护的。有一点很重要,就是当你取消了这个帐号之后,别忘了把这一对密匙删掉.
配置SSH 。
配置客户端的软件 。
OpenSSH 有三种配置方式:命令行参数、用户配置文件和系统级的配置文件("/etc/ssh/ssh_config")。命令行参数优先于配置文件,用户配置文件优先于系统配置文件。所有的命令行的参数都能在配置文件中设置。因为在安装的时候没有默认的用户配置文件,所以要把 "/etc/ssh/ssh_config"拷贝并重新命名为"~/.ssh/config".
标准的配置文件大概是这样的:
[lots of explanations and possible options listed] 。
# Be paranoid by default 。
Host * 。
ForwardAgent no 。
ForwardX11 no 。
FallBackToRsh no 。
还有很多选项的设置可以用"man ssh"查看"CONFIGURATION FILES"这一章.
配置文件是按顺序读取的。先设置的选项先生效.
假定你在www.foobar.com上有一个名为"bilbo"的帐号。而且你要把"ssh-agent"和"ssh-add"结合起来使用并且使用数据压缩来加快传输速度。因为主机名太长了,你懒得输入这么长的名字,用"fbc"作为"www.foobar.com"的简称。你的配置文件可以是这样的:
Host *fbc 。
HostNamewww.foobar.com 。
User bilbo 。
ForwardAgent yes 。
Compression yes 。
# Be paranoid by default 。
Host * 。
ForwardAgent no 。
ForwardX11 no 。
FallBackToRsh no 。
你输入"ssh fbc"之后,SSH会自动地从配置文件中找到主机的全名,用你的用户名登录并且用"ssh-agent"管理的密匙进行安全验证。这样很方便吧.
用SSH连接到其它远程计算机用的还是"paranoid(偏执)"默认设置。如果有些选项没有在配置文件或命令行中设置,那么还是使用默认的"paranoid"设置.
在我们上面举的那个例子中,对于到www.foobar.com的SSH连接:"ForwardAgent"和"Compression"被设置为 "Yes";其它的设置选项(如果没有用命令行参数)"ForwardX11"和"FallBackToRsh"都被设置成"No".
其它还有一些需要仔细看一看的设置选项是:
l CheckHostIP yes 。
这个选项用来进行IP地址的检查以防止DNS欺骗.
l CompressionLevel 。
压缩的级别从"1"(最快)到"9"(压缩率最高)。默认值为"6".
l ForwardX11 yes 。
为了在本地运行远程的X程序必须设置这个选项.
l LogLevel DEBUG 。
当SSH出现问题的时候,这选项就很有用了。默认值为"INFO".
配置服务端的软件 。
SSH服务器的配置使用的是"/etc/ssh/sshd_config"配置文件,这些选项的设置在配置文件中已经有了一些说明而且用"man sshd"也可以查看帮助。请注意OpenSSH对于SSH 1.x和2.x没有不同的配置文件.
在默认的设置选项中需要注意的有:
l PermitRootLogin yes 。
最好把这个选项设置成"PermitRootLogin without-password",这样"root"用户就不能从没有密匙的计算机上登录。把这个选项设置成"no"将禁止"root"用户登录,只能用"su"命令从普通用户转成"root".
l X11Forwarding no 。
把这个选项设置成"yes"允许用户运行远程主机上的X程序。就算禁止这个选项也不能提高服务器的安全因为用户可以安装他们自己的转发器(forwarder),请参看"man sshd".
l PasswordAuthentication yes 。
把这个选项设置为"no"只允许用户用基于密匙的方式登录。这当然会给那些经常需要从不同主机登录的用户带来麻烦,但是这能够在很大程度上提高系统的安全性。基于口令的登录方式有很大的弱点.
l # Subsystem /usr/local/sbin/sftpd 。
把最前面的#号去掉并且把路径名设置成"/usr/bin/sftpserv",用户就能使用"sftp"(安全的FTP)了(sftpserv在sftp 软件包中)。因为很多用户对FTP比较熟悉而且"scp"用起来也有一些麻烦,所以"sftp"还是很有用的。而且2.0.7版本以后的图形化的ftp工具"gftp"也支持"sftp".
拷贝文件 。
用"scp"拷贝文件 。
SSH提供了一些命令和shell用来登录远程服务器。在默认情况下它不允许你拷贝文件,但是还是提供了一个"scp"命令.
假定你想把本地计算机当前目录下的一个名为"dumb"的文件拷贝到远程服务器www.foobar.com上你的家目录下。而且你在远程服务器上的帐号名为"bilbo"。可以用这个命令:
scp dumbbilbo@www.foobar.com:. 。
把文件拷贝回来用这个命令:
scpbilbo@www.foobar.com:dumb. 。
"scp"调用SSH进行登录,然后拷贝文件,最后调用SSH关闭这个连接.
如果在你的"~/.ssh/config"文件中已经为www.foobar.com做了这样的配置:
Host *fbc 。
HostNamewww.foobar.com 。
User bilbo 。
ForwardAgent yes 。
那么你就可以用"fbc"来代替"bilbo@www.foobar.com",命令就简化为"scp dumb fbc:.".
"scp"假定你在远程主机上的家目录为你的工作目录。如果你使用相对目录就要相对于家目录.
用"scp"命令的"-r"参数允许递归地拷贝目录。"scp"也可以在两个不同的远程主机之间拷贝文件.
有时候你可能会试图作这样的事:用SSH登录到www.foobar.com上之后,输入命令"scp [local machine]:dumb ."想用它把本地的"dumb"文件拷贝到你当前登录的远程服务器上。这时候你会看到下面的出错信息:
ssh: secure connection to [local machine] refused 。
之所以会出现这样的出错信息是因为你运行的是远程的"scp"命令,它试图登录到在你本地计算机上运行的SSH服务程序……所以最好在本地运行"scp"除非你的本地计算机也运行SSH服务程序.
用"sftp"拷贝文件 。
如果你习惯使用ftp的方式拷贝文件,可以试着用"sftp"。"sftp"建立用SSH加密的安全的FTP连接通道,允许使用标准的ftp命令。还有一个好处就是"sftp"允许你通过"exec"命令运行远程的程序。从2.0.7版以后,图形化的ftp客户软件"gftp"就支持"sftp".
如果远程的服务器没有安装sftp服务器软件"sftpserv",可以把"sftpserv"的可执行文件拷贝到你的远程的家目录中(或者在远程计算机的 $PATH环境变量中设置的路径)。"sftp"会自动激活这个服务软件,你没有必要在远程服务器上有什么特殊的权限.
用"rsync"拷贝文件 。
"rsync" 是用来拷贝、更新和移动远程和本地文件的一个有用的工具,很容易就可以用"-e ssh"参数和SSH结合起来使用。"rsync"的一个优点就是,不会拷贝全部的文件,只会拷贝本地目录和远程目录中有区别的文件。而且它还使用很高效的压缩算法,这样拷贝的速度就很快.
用"加密通道"的ftp拷贝文件 。
如果你坚持要用传统的FTP客户软件。SSH可以为几乎所有的协议提供"安全通道"。FTP是一个有一点奇怪的协议(例如需要两个端口)而且不同的服务程序和服务程序之间、客户程序和客户程序之间还有一些差别.
实现"加密通道"的方法是使用"端口转发"。你可以把一个没有用到的本地端口(通常大于1000)设置成转发到一个远程服务器上,然后只要连接本地计算机上的这个端口就行了。有一点复杂是吗?
其实一个基本的想法就是,转发一个端口,让SSH在后台运行,用下面的命令:
ssh [user@remote host] -f -L 1234:[remote host]:21 tail -f /etc/motd 。
接着运行FTP客户,把它设置到指定的端口:
lftp -u [username] -p 1234 localhost 。
当然,用这种方法很麻烦而且很容易出错。所以最好使用前三种方法.
用SSH设置"加密通道" 。
"加密通道"的基础知识 。
SSH 的"加密通道"是通过"端口转发"来实现的。你可以在本地端口(没有用到的)和在远程服务器上运行的某个服务的端口之间建立"加密通道"。然后只要连接到本地端口。所有对本地端口的请求都被SSH加密并且转发到远程服务器的端口。当然只有远程服务器上运行SSH服务器软件的时候"加密通道"才能工作。可以用下面命令检查一些远程服务器是否运行SSH服务:
telnet [full name of remote host] 22 。
如果收到这样的出错信息:
telnet: Unable to connect to remote host: Connection refused 。
就说明远程服务器上没有运行SSH服务软件.
端口转发使用这样的命令语法:
ssh -f [username@remote host] -L [local port]:[full name of remote host]:[remote port] [some command] 。
你不仅可以转发多个端口而且可以在"~/.ssh/config"文件中用"LocalForward"设置经常使用的一些转发端口.
为POP加上"加密通道" 。
你可以用POP协议从服务器上取email。为POP加上"加密通道"可以防止POP的密码被网络监听器(sniffer)监听到。还有一个好处就是SSH的压缩方式可以让邮件传输得更快.
假定你在pop.foobar.com上有一个POP帐号,你的用户名是"bilbo"你的POP口令是"topsecret"。用来建立SSH"加密通道"的命令是:
ssh -f -Cbilbo@pop.foobar.com-L 1234:pop.foobar.com:110 sleep 5 。
(如果要测试,可以把"sleep"的值加到500)。运行这个命令之后会提示你输入POP口令:
bilbo@pop.foobar.com'spassword
输入口令之后就可以用"telnet"连接到本地的转发端口了.
telnet localhost 1234 。
你会收到远程mail服务器的"READY"消息.
当然,这个方法要求你手工输入所有的POP命令,这是很不方便的。可以用Fetchmail(参考how to configure Fetchmail)。Secure POP via SSH mini-HOWTO、man fetchmail和在"/usr/doc/fetchmail-[…]"目录下的Fetchmail的FAQ都提供了一些具体的例子.
请注意IMAP协议使用的是不同的端口:IMAP v2的端口号为143而IMAP v3的端口号为220.
为X加上"加密通道" 。
如果你打算在本地计算机上运行远程SSH服务器上的X程序,那么登录到远程的计算机上,创建一个名为"~/.ssh/environment"的文件并加上这一行:
XAUTHORITY=/home/[remote user name]/.Xauthority 。
(如果在远程主机上你的家目录下不存在".Xauthority"这个文件,那么当用SSH登录的时候就会自动创建).
比如启动一个X程序(xterm)可以这个命令:
ssh -f -X -l [remote user name] [remote machine] xterm 。
这将在远程运行xterm这个程序。其它的X程序也是用相同的方法.
为linuxconf加上"加密通道" 。
Linuxconf(http://www.solucorp.qc.ca/linuxconf/)是Linux的配置工具,它支持远程管理。Linuxconf的FAQ重说明了如何通过SSH使用linuxconf:
其命令为:
remadmin --exec [link_command] linuxconf --guiproto 。
如果你想在两台计算机之间用加密的方式传送信息,那么最好用ssh。命令是:
remadmin --exec ssh -l [account] linuxconf --guiproto 。
这是非常有效的而且运行用图形界面管理计算机.
这种方法需要在客户端安装linuxconf。其它的方法还有直接登录到服务器上用"X11Forwarding"或字符界面运行linuxconf.
为Webmin加上"加密通道" 。
Webmin(http://www.webmin.com/webmin/)是一个新的基于浏览器的配置工具。它运行在1000端口。你可以用SSH的"端口转发"对它进行加密:
ssh -f -l [remote user name] [remote host] -L 1234:[remote host]:10000 tail -f /etc/motd 。
把浏览器指向 。
http://localhost:1234 。
版权说明 。
这篇文章翻译和改编自:http://www.mandrakeuser.org/secure/index.html。英文版的版权属于"MandrakeSoft SA and LSTB 1999/2000".
中文版版权归译者brimmer(brimmer@linuxaid.com.cn)和www.linuxaid.com.cn站点所有.
本文遵循Open Content Public Licence.
最后此篇关于SSH使用指南的文章就讲到这里了,如果你想了解更多关于SSH使用指南的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想让我的 NSIS 代码更具可读性。 我需要一些关于明智地编写代码部分的指南(比如 C# 中有 #region #endregion)或任何可以使编写 NSIS 代码变得有趣和容易的信息. 请帮帮我
我正在尝试找出Gherkin中所有可用的语法/格式,例如关于多行参数以及我不知道的所有其他内容。 在挖掘Google搜索结果之后,似乎综合指南位于here中: 我以为那很好,并且it链接到一个页面,该
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
当我将 guides 添加到 valueAxesSettings 中时,即使我选择 valueAxesSettings 到 valueAxes 中,它也不起作用。此外,valueAxesSetting
我正在寻找有关如何管理 .NET 程序集的三个不同程序集版本号的指针、建议,甚至是口述。 Product 版本是最简单的,因为这似乎通常由业务决定。然后,文件版本似乎用于部署之间的版本控制,其中实际的
昨晚我脑子里冒出一件事。我想知道为什么我们在项目之间仍然有不同的编码风格。由于风格是个人的东西,我认为最好这样对待它。我们为什么不呢?这有什么技术限制吗? 我举几个例子: // Code sample
我有一个应用程序,用户可以在其中从主 Activity 登录,然后可以使用 ListView 浏览实体的层次结构。因此,Activity 堆栈看起来像这样: A -> B -> B -> B -> .
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
大家好,上个月我开始学习 CSS。我做的第一件事是阅读我能在 www.w3school.com 上找到的所有内容,之后我开始阅读 CSS Mastery 2nd版本。我已经建立了几个自己的网站并取得了
我希望用户能够上传个人资料图片。 关于如何最好地处理这个问题,是否有任何指导方针?例如 - 在哪里保存图像?和要使用的文件夹结构。- 让用户难以浏览每个人的个人资料照片? 谢谢。 最佳答案 如果你自己
我有兴趣了解有关条件重启系统及其工作原理的更多信息。我不知道从哪里开始。我一直在查看源代码,但想知道是否有更高级别的指南可用。 最佳答案 Kent Pitman:条件系统 http://www.nhp
我想将小型、精简且平均的基于 C 的解析器合并到我的 Android 项目中。我过去做过 JNI 编程,但没有在 Android 上进行任何类型的 native (C) 开发。我的计划是将 C lib
免责声明:我试图搜索类似的问题,但是它返回了关于每个 C++ 问题的信息...此外,我将感谢任何可以提出更好标题的人。 C++ 中有两个著名的循环结构:while 和for。 我故意忽略了 do ..
我一直在尝试批量删除 Wordpress 帖子中的垃圾链接,如下所示: . 它们位于 post_content 列下的 wp_posts 表中。我试图通过在 href 标记中添加 % 的通配符来做到这
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
我们正在讨论为实体类定义方法的最佳方式 - 作为扩展方法或使用分部类。我们讨论的这类方法不会修改实体的状态,它们是纯粹的“辅助”方法,可以查询状态并返回值。 这两种方法的主要好处是保持实体类干净,同时
您将如何在 Flutter 中在实际屏幕上实现引导层。像这样: 最佳答案 这不是微不足道的。以下是必需的组件: 首先,你必须open a transparent full screen dialog
我们需要通过在 C/C++ 中实现特定算法来解决的大多数科学计算问题都需要远低于 double 的精度。例如,1e-6、1e-7 精度涵盖了 ODE 求解器或数值积分的 99% 情况。即使在我们确实需
我正在研究对专有 UI 框架(用于桌面应用程序)的 RTL 支持,我想知道:是否有关于如何更改小部件渲染的指南? 我正在寻找以下内容的列表: 复选框标签位于复选框左侧,右对齐 工具栏按钮从右到左排列
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!