个人工具
104.160.18.24
该IP地址的讨论
登录
查看“SSHHowto”的源代码 - Ubuntu中文
页面
讨论
查看源代码
历史
搜索
导航
首页
最近更改
随机页面
页面分类
帮助
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息
查看“SSHHowto”的源代码
来自Ubuntu中文
←
SSHHowto
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
---- 原文出处:https://wiki.ubuntu.com/SSHHowTo 原文作者:UbuntuWiki 授权许可:[http://creativecommons.org/licenses/by-sa/2.0/ 创作共用协议] [http://www.gnu.org/copyleft/fdl.html GNU FDL] 翻译人员:denven 校对人员:Bentusi 贡献者: 适用版本: 文章状态:[[等待翻译]] ---- === SSH(安全Shell)简介 === OpenSSH 能提供安全的远程访问,支持命令行会话,X11转发(X forwarding),SCP 和安全 FTP 文件传输。同时,也可利用端口转发(port forwarding)为其它协议建立加密通道。 SSH 可以取代传统的telnet,rlogin,FTP。因为这些协议中密码以明文的方式传递,这意味着密码很容易被截取,而 SSH 通过加密措施解决了这些问题,提供安全的远程访问方案。它支持命令行会话,X11转发(X forwarding),SCP 和安全 FTP 文件传输。同时,也可利用端口转发(port forwarding)为其它协议建立加密通道。 === 安装SSH服务器端 === 如果希望安全地连接到远程主机(在Windows下用Putty来登录),需要为其安装一个ssh服务端。Ubuntu 采用 openssh-server 做服务端,需要的安装包是 openssh-server。 === 通过SSH进行远程文件传输 === ==== Linux下图形界面操作 ==== 用Nautilus即可 SSH 登录远程主机进行浏览和传输文件。 依次点击 “'''位置(Places)” -> “连接到服务器(Connect to Server)'''”,“'''服务类型(Service Type)'''”选择 “'''SSH'''”,在“'''服务器(Server)'''”栏中填写好远程主机的名称和IP地址,“'''用户名(User Name)'''”处填写登录名,你也可以为自己的登录帐户设置一个昵称。 登录后,可以在不同端的窗口间通过拖放操作来复制文件。 ==== Windows下图形界面操作 ==== 用WinSCP在Windows下登录Linux的SSH服务器进行文件传输,该软件可以在[http://winscp.net]免费下载。 ==== 使用命令行操作 ==== 使用 scp 命令在本地和远程主机间安全复制文件,如下: <pre><nowiki> scp <file> <username>@<IP address or hostname>:<DestinationDirectory> </nowiki></pre> 例如,要从本地主机复制一个文件到远程主机,运行: <pre><nowiki> scp file.txt joe@192.168.1.103:/home/joe </nowiki></pre> 又如: <pre><nowiki> scp "New Document.odw" joe@laptop:"/home/joe/Summer 2005" </nowiki></pre> 使用该命令,必须包含本地文件名、远程主机名、远程主机 IP 地址(或域名)、要复制到的远程目录三个部分。 从远程主机复制文件到本地主机,运行: <pre><nowiki> scp hornbeck@192.168.1.103:/home/hornbeck/otherfile.txt . </nowiki></pre> '.'表示将文件复制到当前目录,也可以用其他的文件名,如'my.txt'将复制过来的文件重命名。 scp 命令两个最常用的参数是 '-r' 和 '-C',其中 '-r' 表示递归复制整个目录树, '-C'表示压缩,可在加快文件传送速度,此选项在 ssh 和 sftp 命令中同样有效。 注意:不能在两台远程主机间复制文件,要么从本地复制文件,要么将文件复制到本地。 在 scp 命令中,如果本地和远程主机为同一台主机,那么只需主机名(@xxx可省略)即可,如果远程主机目录被省略,那么表示在用户主目录下进行操作。例如: <pre><nowiki> scp 192.168.1.103:file.txt . </nowiki></pre> === 通过ssh登录远程主机 === 用 ssh 命令远程登录: <pre><nowiki> ssh <username>@<computer name or ipaddress> </nowiki></pre> 又如: <pre><nowiki> ssh joe@laptop </nowiki></pre> 如: <pre><nowiki> ssh mike@192.168.1.1 </nowiki></pre> [[Anchor(public-key-auth)]] === 公钥验证 === 以前大家都使用传统的“用户名/密码”的验证方式。采用这种方式,一旦别人猜测或者嗅探到你的密码,安全性就无法保障。一直以来 SSH 提供公共密钥验证方式,即使用私钥和公钥密钥对来代替简单的密码。 如果没有私钥,请先创建一个,输入: <pre><nowiki> ssh-keygen -t dsa </nowiki></pre> 然后,系统将依次询问将私钥保存到何处(保存到默认位置即可)、选择密码短语(密码短语是用来加密私钥的)。任何人只要获取到(没被保护的)私钥,他就具有访问其他机器的权限,因此建议设置密码时仔细考虑、选择一个好的密码。如果你不甚了解如何选择密码,可以参考[[ChoosingSecurePassword]](如何选择一个安全的密码)。 到此为止,要想访问其他的机器只依赖于你的公钥。公钥在私钥创建时同时被创建,通常它位于目录: <pre><nowiki> ~/.ssh/id_dsa.pub </nowiki></pre> 在目标主机的密钥验证文件中需要用到这个密钥(一行ASCII的字符串),这个文件位于目标主机该目录: <pre><nowiki> ~/.ssh/authorized_keys </nowiki></pre> 所以需要将这行字符串拷贝到密钥验证文件中,或者使用命令"ssh-copy-id"进行处理: <pre><nowiki> ssh-copy-id root@fileserver01 </nowiki></pre> 使用该命令需要输入root密码,如果你不知道root密码,那么尝试用其他中间途径拷贝该密钥到目的主机。在公钥添加之后,那么就可以被验证通过了。 attachment:IconsPage/IconNote.png 在使用<code><nowiki>ssh-copy-id</nowiki></code>命令之前,需要用<code><nowiki>ssh-add</nowiki></code>(下文中有描述)命令将密码短语保存到 ssh-agent。保存后用 ssh 命令登录远程目的主机: Run::运行: <pre><nowiki> ssh root@fileserver01 </nowiki></pre> 这时将不会再要求输入密码,但是会要求输入密码短语。请注意,“密码”与“密码短语”是两个不同的概念。用户密码保存在目标机器的 /etc/passwd 文件中,而“密码短语”则是用来解密本机的私钥的。 在这重申一下,公钥验证的实际安全性要高于密码验证机制是因为需要两步验证: **** 已加密的私钥 **** 用来解密私钥的密码短语 所以如果你选择无密码(在下一节中提到)的方式,比起单独使用一个密码的方式,更无安全性可言。 attachment:IconsPage/IconNote.png 在Ubuntu中已经启用基于密码的验证方式,如果你想禁用远程用户使用密码进行登录,可以手动设置:在 /etc/ssh/sshd_config 文件中设置"''Password``Authentication no''",然后重启 ssh 服务(sudo /etc/init.d/ssh restart)。 === 限制SSH登录 === 使用 SSH 公钥验证还有另一个方便之处,那就是目标服务器可以限制访问者所使用的命令。例如你仅需通过SSH来维护一个 CVS 仓库,可以在密钥验证文件中加入下述行: command="/usr/bin/cvs server" ssh-dss AAAAB3N.... 这样只允许用户运行该命令。 === 通过批处理脚本自动匹配登录 === 在公钥验证(见上文)中也可以对需要输入密码的任务进行自动匹配。如果你想每天午夜时刻从远程主机拷贝一个文件,那么需要在两台机器之间建立一种信任关系。来看如何实现,首先在一台机器上为该服务创建一账号,再(用 ssh-keygen -t dsa命令)创建密钥对,此时如果询问是否建立密码短语,按回车键不创建(这样私钥将不会受到保护),然后(用ssh-copy-id命令)将公钥添加到另一台机器的authorized_keys2文件,这样用 ssh 登录到另一台机器将不会要求输入密码短语,最后在crontab中添加SSH调用即可。 attachment:IconsPage/IconWarning3.png '''注意!'''对私钥不加保护可能会留下安全隐患,黑客们只需获取私钥然后就可以访问目标机器了。 [[Anchor(ssh-agent)]] === 使用ssh-agent === 如果需要经常通过SSH登录其他机器进行文件复制(这对管理员来说很平常),有没有简化掉密码短语输入这一步的途径呢?当然有!用SSH agent!ssh agent的"ssh-add"可以让你一劳永逸,因为启用后SSH agent会调用一个专门的子进程来记住密码短语的输入。 其原理是什么呢?这个不是我们需要关心的,你只要知道 X 会话在ssh-agent中会自动建立。在登录输入密码时启用"ssh-add"即可,下次使用 *SSH*时将不会有要求输入密码短语这一步,是不是很方便呢?:) attachment:IconsPage/IconNote.png '''重要:'''如果需要暂时离开自己的机器,建议最好锁住荧屏,以防离开期间他人用你的机器登录到远程主机(因为他们也不需要输入密码短语来验证)。 如果启用了"ssh-add",仍希望以后登录时要求提示有密码短语输入,需要进行如下设置: * Click on *System* 点击*System(系统)* * Choose *Preferences* 选择*Preferences(选项)* * Choose *Sessions* 选择*Sessions(会话)* * Select the *Startup Programs* tab 选择*Startup Programs(启动程序)*选项卡 * Click on *Add* 点击*Add(添加)* * Enter "ssh-add" as a command 输入命令"ssh-add" 这样,下次登录时就会有要求用户输入密码短语这一步了。 === 安全性 === 用户日志和其他一些信息保存在 /var/log/auth.log (或auth.log.0等)文件中,通过检查日志文件来查看是否有其他用户尝试登录自己的系统,运行命令: <pre><nowiki> awk '/Invalid user/ {print $8}' /var/log/auth.log{,.0} | sort | uniq -c </nowiki></pre> 该命令通过排列用户登陆次数来显示某些使用非法用户名尝试登录(或许是自动登录攻击)的痕迹。 用 last 命令查看日志中用户及其最后登录信息 ,用 lastb 命令可以快速查看。 配置更具安全性的SSH服务器,参考下文Advanced Configuration(高级配置)。 === 高级配置 === 高级配置和其他安全性方面请参考[[AdvancedOpenSSH]]。 === 关于GPG和OpenSSH === 如何使用 GPG 部署 SSH 密钥请参考[[GPGsigningforSSHHowTo]] 。 ---- [[category:CategoryDocumentation]] ---- [[翻译完成]]
返回至
SSHHowto
。