`

让你更高效使用SSH

 
阅读更多
SSH有很多非常酷的特性,如何它是你每天的工作伴侣,那么我想你有必要了解以下16条高效使用SSH的秘籍,它们帮你节省的时间肯定会远远大于你用来配置它们的时间。

1. 多条连接共享

如果你需要在多个窗口中打开到同一个服务器的连接,而不想每次都输入用户名,密码,或是等待连接建立,那么你可以配置SSH的连接共享选项,在本地打开你的SSH配置文件,通常它们位于~/.ssh/config,然后添加下面2行:

ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r

现在试试断开你与服务器的连接,并建立一条新连接,然后打开一个新窗口,再创建一条连接,你会发现,第二条连接几乎是在瞬间就建立好了。

Windows用户

如果你是Windows用户,很不幸,最流行的开源SSH客户端Putty并不支持这个特性,但是Windows上也有OpenSSH的实现,比如这个Copssh,如果你觉得下面的一些技巧对你很有帮助,或许你应该试试Copssh。

文件传输

连接共享不止可以帮助你共享多个SSH连接,如果你需要通过SFTP与服务器传输文件,你会发现,它们使用的依然是同一条连接,如果你使用的Bash,你会发现,你甚至SSH甚至支持Tab对服务器端文件进行自动补全,共享连接选项对于那些需要借助SSH的工具,比如rsync,git等等也同样有效。

2. 长连接

如果你发现自己每条需要连接同一个服务器无数次,那么长连接选项就是为你准备的:

ControlPersist 4h

现在你每次通过SSH与服务器建立连接之后,这条连接将被保持4个小时,即使在你退出服务器之后,这条连接依然可以重用,因此,在你下一次(4小时之内)登录服务器时,你会发现连接以闪电般的速度建立完成,这个选项对于通过scp拷贝多个文件提速尤其明显,因为你不在需要为每个文件做单独的认证了。

3. 别再输入密码

如果你还在通过密码方式登录SSH,那么你或许应该试试SSH Keys,首先使用OpenSSH为自己声称一对密钥:

$ ssh-keygen

跟随指示,完成之后,你应该可以在你的.ssh目录下看到两个文件,id_rsa就是你的私钥,而id_ras.pub则是你的公钥,现在你需要将你的公钥拷贝到服务器上,如果你的系统有ssh-copy-id命令,拷贝会很简单:

$ ssh-copy-id smylers@compo.example.org

否则,你需要手动将你的私钥拷贝的服务器上的~/.ssh/authorized_keys文件中:

$ > .ssh/authorized_keys; chmod go-w .ssh .ssh/authorized_keys’

现在试试重新连接到SSH服务器,或是拷贝文件,是不是已经不需要再输入密码了?

为Putty配置SSH Key

Putty也可以使用SSH Key,从Putty网站下载PuttyGen和Pageant,然后使用PuttyGen生成你的密钥,将公钥拷贝到服务器的’.ssh/authorized_keys’目录,然后运行Pageant,导入你的私钥,让它在后台运行,险隘你就可以使用Putty通过公钥直接登录服务器了,你可以在Putty手册的第8,9章了解关于这一特性的详细介绍。

4. 连接中转

有时候你可能需要从一个服务器连接另外一个服务器,比如在两个服务器之间直接传输数据,而不用通过本地电脑中转:

www1 $ scp -pr templates www2:$PWD

(顺便说一下,当你需要在两台服务器间拷贝文件时,$PWD变量时非常有用的),因为即使你已经在两台服务器上添加了你本地电脑的公钥,scp默认仍然会提示你输入密码:这是因为你用来作为跳板的那台服务器上并没有你的私钥,所以,第二胎服务器会拒绝你的公钥,但是一定不要通过将你的私钥拷贝到中转服务器上来解决这个问题,你可以使用agent forwarding来解决这个问题,只要在你的.ssh/config文件中加入下面这行代码就可以了:

ForwardAgent yes

或者是在Putty中勾上“Allow agent forwarding”选项,现在你的本地SSH就变成了第一台服务器的SSH代理,从第一台服务器在连接其它服务器就变和和在你本地一样简单,注意,如果要开启这个选项,前提是这个中间服务器值得你信任。

5. 省略主机名

输入服务器的完整主机名来建立一个新的SSH连接实在是太乏味无聊了,尤其是当你有一组拥有相同域名但是子域名不同的服务器需要管理时,比如下面这样:

* www1.example.com
* www2.example.com
* mail.example.com
* intranet.internal.example.com
* backup.internal.example.com
* dev.internal.example.com

或许你的网络已经配置了可以直接使用短域名,比如intranet,但是如果你的网络不支持,实际上你可以自己搞定这个问题,而不用求助网络管理员。

解决办法根据你用的操作系统而略有差异,下面是我的Ubuntu系统的配置:

prepend domain-search “internal.example.com”, “example.com”;

然后你需要重启网络:$ sudo restart network-manager

不同的系统,这两条命令可能会略有差异。

5. 主机别名

你也可以在你的SSH配置中直接定义主机别名,就像下面这样:

Host dev
    HostName dev.internal.example.com

你还可以使用通配符来进行分组:

Host dev intranet backup
    HostName %h.internal.example.com

Host www* mail
    HostName %h.example.com

在Putty中你可以为每个主机名保存单独的session,然后双击建立连接(但是它可能没办法支持通配符)。

7. 省去用户名

如果你在远程服务器上的用户名和你本地的用户名不同,你同样可以在SSH配置中进行设置:

Host www* mail
    HostName %h.example.com
    User simon

现在就算我的本地用户名是 smylers,我仍然可以这样连接我的服务器:

$ ssh www2

SSH会使用simon账户连接你的服务器,同样,Putty可以保存这个信息在你的session中。

8. 在服务器间跳转

有些时候,你可能没法直接连接到某台服务器,而需要使用一台中间服务器进行中转,这个过程也可以自动化。首先确保你已经为服务器配置了公钥访问,并开启了agent forwarding,现在你就可以通过2条命令来连接目标服务器,不会有任何提示输入:

$ ssh gateway
gateway $ ssh db

然后在你的本地SSH配置中,添加下面这条配置:

Host db
    HostName db.internal.example.com
    ProxyCommand ssh gateway netcat -q 600 %h %p

现在你就可以通过一条命令来直接连接目标服务器了:

$ ssh db

这里你可能会需要等待长一点的时间,因为SSH需要进行两次认证,,注意netcat也有可能被写成nc或者ncat或者前面还需要加上g,你需要检查你的中间服务器来确定实际的参数。



当然这样做的前提是你的服务器没有使用HTTS服务,但是实际上你只需要设置一台服务器使用https端口就够了,你但你可以访问这台服务器,你就可以使用我们前面提到的技术利用它作为跳板来访问其它服务器,但是记住,你需要提前配置好这台服务器(现在怎么样?),这样万一当你身处一个只能访问Web的网络环境时,就可以省掉打电话让其他人帮你配置中间服务器的麻烦了。



9. 远程GUI

有时候通过本地的GUI程序来访问远程服务器的文件会非常有用,比如,编辑一副图片,或者查看一个PDF文件,或者只是简单的通过一个非命令行的编辑器来修改代码,我发现GVim要比终端里的Vim更有用,因为我可以通过gvimopens打开一个新窗口来编辑文件,而用当前的SSH窗口继续执行其它操作,不要要这样做,你需要先在你的SSH配置中开启一个叫做X forwarding的选项:

ForwardX11 yes

这个选项需要服务器配置才能起作用,服务器也需要开启X forwarding,你可以在服务器的/etc/ssh/sshd_config中添加下面这个命令:

X11Forwarding yes

同时你还需要确保安装了xauth,编辑器,图片查看器以及其它的你需要运行的图形化程序,这种方式只有在支持本地X服务器的操作提供才可以工作,mac和Windows上都有免费的X Server,你可能需要花些时间配置它们,相比之下,切换到Linux相对会更容易一下。

10.本地操作远程文件

另一种让远程GUI程序显示在本地的替代方案就是让本地的GUI程序可以直接操作远程文件,你可以通过SSHFS来实现,只需要创建一个空目录,然后使用SSHFS将一个远程目录mount到这个目录就可以了:

$ mkdir gallery_src
$ sshfs dev:projects/gallery/src gallery_src
$ cd gallery_src
$ ls

现在你就可以使用任何你喜欢的本地程序来便捷这个目录中的文件了,它们看起来是在你的本地,但其实时远程服务器上的文件,你可以使用fusermount命令来unmount这些文件,不要担心记不住,它们就在sshfs手册的顶上:

$ cd ..
$ fusermount -u gallery_src

SSHFS可以在Linux和OSX上工作,Windows用户我目前还没找到什么好办法。

11. 通过Vim访问远程文件

Vim有一个内置的功能可以直接编辑远程文件,需要借助SCP URL:

$ gvim scp://dev/projects/gallery/src/templates/search.html.tt

这中方式明显不如SSHFS灵活,但是如果你只需要对远程服务器的1,2个文件进行编辑时,这条命令就要更灵活一些了,并且可以在Windows上你也可以这样做:

:help netrw-problems

12. 使用本地App连接远程服务器

有时可能有些服务,比如数据库或是Web服务器,它们运行在远程服务器上,但是如果有用方式可以直接从本地程序连接它们,那会非常有用,要做到这一点,你需要用到端口转发(port forwarding),举个例子,如果你的服务器运行Postgres(并且只允许本地访问),那么你就可以在你的SSH配置中加入:

Host db
    LocalForward 5433 localhost:5432

现在当你连接你的SSH服务器时,它会在你本地电脑打开一个5433端口(我随便挑的),并将所有发送到这个端口的数据转发到服务器的5432端口(Postgres的默认端口),然后,只要你和服务器建立了连接,你就可以通过5433端口来访问服务器的Postgres了。

$ ssh db

现在打开另外一个窗口,你就可以通过下面这条命令在本地连接你的Postgres数据库了:

$ psql -h localhost -p 5443 orders

如果你想要使用服务器不支持的图形化Postgres客户端时,这条命令会显得尤其有用:

$ pgadmin3 &

或者你有一个后台的Web服务器,你不希望直接通过Internet访问它,你也可以通过端口转发来访问它:

Host api
    LocalForward 8080 localhost:80

现在连接到服务器:

$ ssh api

然后将浏览器指向你选择的端口号:

$ firefox http://localhost:8080/

13. 减少延迟

如果每次连接服务器都意味着你需要等待几十秒而无所事事,那么你或许应该试试在你的SSH配置中加入下面这条:

GSSAPIAuthentication no

如果这条命令有效的话,你应该通知你的系统管理员让他在服务器上禁用这个选项,这样其他人就不用再分别添加这条配置到它们的本地配置了。

14. 加速连接

如果你确保你和某个服务器之间的连接是安全的(比如通过公司内网连接),那么你就可以通过选择arcfourencryption算法来让数据传输更快一些:

Host dev
    Ciphers arcfour

注意这个加速是以牺牲数据的“加密”性为代价的,所以如果你连接的是位于网上的服务器,千万不要打开这个选项,并且确保你是通过VPN建立的连接。

开始行动吧!

以上就是我收集的高效使用SSH的技巧合集了,如果你还有更多技巧想要分享,记得通过Smylers@cpan.org或是通过@Smylers2来和我联系。

现在就赶紧行动试试通过这些技巧来让你的SSH更有效率吧!
分享到:
评论

相关推荐

    16条技巧让你更高效使用SSH

    ### 16条技巧让你更高效使用SSH SSH(Secure Shell)是一种广泛应用于远程服务器管理的强大工具,它不仅提供安全的远程登录功能,还具备多种高级特性,如文件传输、端口转发等。本文将详细介绍16条提高SSH使用效率...

    redhat5.4 ssh 服务配置

    在RHEL5.4中,通常推荐使用SSH2,因为它提供了更高级别的安全保护。 安装SSH服务在RHEL5.4上通常是预装的,但你可以通过`yum install openssh`来确保其安装。SSH服务的主要配置文件位于`/etc/ssh/sshd_config`。在...

    使用SSH框架的好处

    ### 使用SSH框架的好处 在软件开发领域,尤其是Java Web应用开发中,SSH框架是指由Spring、Struts和Hibernate三个开源框架组成的开发模式。这三种技术的结合为开发者提供了一个高效、稳定且易于扩展的开发环境。...

    ssh集成 ssh集成

    SSH集成通常指的是将SSH功能与其他系统或工具整合,以实现更高效、更安全的远程管理和服务交互。在IT领域,SSH集成尤其常见于服务器管理、自动化任务执行、版本控制系统(如Git)以及持续集成/持续部署(CI/CD)流程...

    linux 中ssh的安装与使用.doc

    安全性体现在 SSH 的加密和身份验证机制上,灵活性体现在 SSH 可以在多种平台上运行,包括 Linux、Windows 和 MacOS 等, 可靠性体现在 SSH 的稳定性和高效性上。 六、 SSH 的应用 SSH 的应用非常广泛,包括远程...

    SSH简介及配置使用SSH登陆远程主机讲义

    SSH,全称Secure Shell,是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他网络服务。它由Tatu Yloenen开发,...通过正确配置和使用SSH,网络管理员可以在保障安全的同时,高效地进行远程操作和管理。

    BvSsh Bitvise SSH Bitvise SSH Client Bitvise SSH service

    总的来说,Bitvise SSH为用户提供了一个全面、安全且易于使用的SSH工具集,无论是对于日常的系统管理、远程工作还是服务器维护,都是一个非常可靠的选择。通过安装这两个组件,用户可以构建一个安全的远程访问环境,...

    SSH案例-最基础的ssh框架使用案例

    SSH框架,全称为Struts2、...通过这个"SSH案例-最基础的ssh框架使用案例",你可以掌握SSH框架的基础使用,为后续更复杂的企业级项目开发打下坚实的基础。在实践中不断学习和优化,将使你对SSH框架的理解更加深入。

    SSH的ueditor使用

    通过以上步骤,你就可以在自己的项目中成功地集成SSH和UEDitor,实现在不安全的网络环境下安全、高效地编辑和管理服务器上的文本内容。虽然网上可能存在一些不适用的教程,但只要静下心来,逐步理解和实践,一定能够...

    SSH_Test.rar_C ssh_C#ssh_C++ ssh_C++ SSH_libssh2库

    对于C语言,使用libssh2库实现SSH功能,你需要理解基本的会话管理、身份验证和通道创建。首先,初始化一个SSH会话,然后设置主机名、端口号和连接参数。接着,进行身份验证,这可能涉及到公钥或密码的处理。最后,...

    ssh 使用rsync 工具

    通过SSH使用`rsync`工具是一种非常实用且高效的方法,不仅可以实现远程文件同步,还能够确保数据的安全性和一致性。掌握这一技能对于IT运维人员来说至关重要,无论是日常的数据备份还是紧急情况下的数据恢复,都能够...

    使用SSH构建Web应用系统

    【使用SSH构建Web应用系统】 SSH(Struts、Spring、Hibernate)是一种常见的Java Web开发框架组合,用于构建高效、可扩展的Web应用。这个框架集合提供了MVC模式、依赖注入和对象关系映射等功能,极大地提高了开发...

    SSH-SCP使用方法

    ### SSH-SCP使用方法详解 #### 一、概述 SSH (Secure Shell) 是一种网络协议,用于计算机之间的安全登录及数据传输。SCP (Secure Copy Protocol) 是基于SSH协议的一个应用,用于安全地在不同主机之间复制文件。SCP...

    SSH2整合程序,使用注解方式,高效开发。可以下来参考学习

    SSH2(Struts2、Spring、Hibernate)是一个经典的Java Web开发框架组合,它极大地简化了企业级应用的开发过程。...这不仅有助于你快速理解SSH2框架,而且还能帮助你在实际项目中更高效地进行开发。

    QT实现SSH,sftp

    在本文中,我们将深入探讨如何使用QT库来实现SSH(Secure Shell)和SFTP(Secure File Transfer Protocol)功能,以及如何在项目中集成QSsh库。 首先,SSH是一种网络协议,用于安全地远程登录到服务器,执行命令,...

    ssh登录使用radius服务器认证配置方法

    总结来说,通过在Linux系统上配置SSH服务与RADIUS服务器集成,可以实现更安全、集中的用户认证管理,这对于大型企业网络而言是至关重要的。这种方式不仅提高了安全性,还简化了管理员的工作,使得用户账户管理更加...

    SSH Secure Shell

    SSH(Secure Shell)是一种网络协议,用于在不...总之,SSH Secure Shell是IT管理员必备的工具,它为远程服务器管理和维护提供了高效且安全的方式。熟悉和掌握SSH的使用方法对于提升工作效率和保障网络安全至关重要。

    SSH Secure File Transfer Client

    SSH Secure File Transfer Client是一款专为Windows用户设计的工具,它允许用户通过SSH(Secure Shell)协议安全地...通过学习和熟练掌握这个客户端,IT管理员和开发者可以更高效、更安全地管理他们的远程Linux系统。

    在juniper路油器上配置ssh  

    SSH2相比于SSH1具有更好的安全性。因此,在配置SSH服务时建议选择SSH2。 - 要在Juniper路由器上启用SSH2,可以通过以下命令进行设置: ```junos [edit system services] set ssh protocol-version 2 ``` 如果不...

    ssh注册登录项目

    在实际项目中,理解并掌握这些SSH相关的知识,可以帮助我们更安全、高效地管理和操作远程系统。通过对`a7d4ce082a5e44918d5c5301fce04f95`这个压缩包文件的学习和实践,你将能够深入理解SSH注册登录的全过程,并具备...

Global site tag (gtag.js) - Google Analytics