SSH是什么东西

转载自:http://www.moon-soft.com/program/bbs/readelite240875.htm

什么是SSH? 
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。 

SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。 

最初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 Config 文件内容及作用 #### 配置文件路径 SSH 客户端会按照特定顺序读取配置数据,优先级依次为: 1. **命令行选项** 2. **用户级别的配置文件 (~/.ssh/config)** 3. **系统范围的配置文件 (/etc/ssh/ssh_config)** 这种加载顺序允许用户自定义其 SSH 行为,而无需修改全局配置[^1]。 --- #### SSH Config 的基本结构 SSH Config 是一个纯文本文件,通常位于 `~/.ssh/config` 路径下。它支持通过关键字和参数的形式定义各种连接属性。以下是常见的关键字及其功能: | 关键字 | 描述 | |--------------|----------------------------------------------------------------------| | `Host` | 定义主机别名或匹配模式 | | `HostName` | 实际要连接的目标服务器地址 | | `User` | 登录目标服务器时使用的用户名 | | `Port` | 目标服务器监听的 SSH 端口号,默认为 22 | | `IdentityFile` | 指定用于身份验证的私钥文件 | 例如,在以下配置中: ```plaintext Host sshtest HostName www.test.com User user Port 22 IdentityFile ~/.ssh/id_rsa_test ``` 上述片段表示当运行 `ssh sshtest` 命令时,客户端会自动尝试以 `user` 用户的身份连接到 `www.test.com` 主机,并使用指定的私钥文件进行认证[^4]。 --- #### SSH Config 的高级特性 除了基础配置外,SSH Config 支持更复杂的场景需求,比如多账户管理和条件匹配。 ##### 多账户管理 对于需要频繁切换不同 Git 或其他服务账号的情况,可以通过 `.ssh/config` 中的不同条目实现自动化区分。例如: ```plaintext Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_rsa_personal Host github-work HostName github.com User git IdentityFile ~/.ssh/id_rsa_work ``` 这样可以分别用 `git@github-personal` 和 `git@github-work` 测试不同的 SSH 密钥是否生效[^2]。 ##### 条件匹配 (`Match`) `Match` 关键字可以根据动态条件应用特定配置项。例如仅针对某些 IP 地址启用代理跳转: ```plaintext Match host *.internal.example.com ProxyJump gateway.internal.example.com ``` --- #### 应用实例 下面是一个综合性的 SSH Config 示例,展示了如何简化日常操作并增强安全性: ```plaintext # 默认配置 Host * ServerAliveInterval 60 ForwardAgent yes # 生产环境服务器 Host prod-server HostName 192.168.1.100 User admin Port 2222 IdentityFile ~/.ssh/prod_key IdentitiesOnly yes # 开发测试机器 Host dev-machine HostName test.dev.local User developer Port 22 PreferredAuthentications publickey ``` 此配置不仅减少了重复输入的工作量,还提高了效率和一致性[^5]。 --- #### 注意事项 1. **权限设置**:`.ssh/config` 文件应具有严格的访问控制(建议权限为 600),以免泄露敏感信息[^3]。 2. **冲突处理**:如果多个 `Host` 条目存在重叠,则较靠后的规则会被优先采用。 3. **调试工具**:遇到问题时可使用 `-v`, `-vv`, 或 `-vvv` 参数查看详细的日志输出。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值