查看“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:服务器]]
返回
SSHHowto
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
登录
导航
首页
最近更改
随机页面
页面分类
帮助
搜索
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息