SSH隧道到底是什么?术语之间有什么区别:SSH 隧道和端口转发?不同类型的 SSH 隧道方法之间的确切区别是什么?
本地端口转发 vs 反向端口转发 vs 动态隧道
可以使用每种类型的理想场景是什么?
通俗地说,Secure Shell 或 SSH 是在两个计算机程序之间建立的:
客户端和服务器之间的连接使用加密,因此在不安全的网络上建立有效的安全通道。术语“安全外壳”来自服务器在服务器计算机上运行本地外壳的能力,允许客户端执行命令并查看其结果。但是 SSH 也可以用于许多其他目的。
服务器和客户端都使用已知的协议进行通信,这意味着它们的消息采用已知的格式。但是,SSH 也可以进行隧道传输,这意味着传输消息中的消息或协议中的协议。在这种情况下,服务器充当交换机或代理,在客户端与其目标之间来回传输消息,例如避开本地防火墙:
来自内部协议的消息以这种方式加密并封装在 SSH 协议中。
下面详细介绍了 SSH 的一些用途,但绝不是全部。
要在不登录的情况下在远程系统上运行命令,请在登录信息后指定命令:
$ ssh host command
Run Code Online (Sandbox Code Playgroud)
例如,要检查远程磁盘空间:
$ ssh host df
Run Code Online (Sandbox Code Playgroud)
Linux 的另一个示例是将麦克风从一台机器传输到另一台机器的扬声器:
$ dd if=/dev/dsp | ssh -C user@host dd of=/dev/dsp
Run Code Online (Sandbox Code Playgroud)
要通过 SSH 复制数据和文件,有几个选项。
可以使用命令 cat 进行复制。如果您尝试复制进程的输出而不是文件,这当然是一条合理的路线:
$ cat file | ssh -e none remote-host 'cat > file'
Run Code Online (Sandbox Code Playgroud)
如果这些将是大文件,您可能需要使用 -C 标志来启用压缩。
对于复制文件,程序 scp 的工作方式与 cp 类似,但它也接受远程目标:
$ scp .bash_profile matt@example.com:~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
对于用于复制文件的类似 FTP 的界面,请使用程序 sftp。
SSH 允许安全的端口转发。
例如,假设您想从客户端 A 连接到服务器 B,但通过服务器 C 安全地路由流量。这对于避开防火墙很有用。
从 A,运行:
A$ ssh C -L localport:B:remoteport
Run Code Online (Sandbox Code Playgroud)
然后,要连接到 B:remoteport,请连接到 localhost:localport。
如果您使用 add -g,那么任何可以到达 A 的人都可以通过 A:localport 连接到 B:remoteport。
例如,假设您的作品禁止了 reddit.com。运行这个:
# ssh yourserver -L 80:reddit.com:80
Run Code Online (Sandbox Code Playgroud)
并且,在 /etc/hosts 中将 reddit.com 和 www.reddit.com 的地址设置为 127.0.0.1(您还需要禁用任何本地 Web 服务器)。现在,它会通过您的服务器秘密访问 reddit.com。
如果您经常这样做,您可能需要添加一个特殊的主机:
Host redditfw
HostName yourserver
LocalForward 80 reddit.com:80
Run Code Online (Sandbox Code Playgroud)
或者,假设您希望通过安全地通过本地计算机 C 来授予远程计算机 B 访问另一台计算机 A 的权限。
然后,在 C 上,您可以运行:
C$ ssh B -R remoteport:A:targetport
Run Code Online (Sandbox Code Playgroud)
此时B上的本地用户可以通过localhost:remoteport连接到A:targetport。
如果要让非本地用户能够通过localhost:remoteport连接A:targetport,那么在sshd_config文件中设置:
GatewayPorts yes
Run Code Online (Sandbox Code Playgroud)
如果您经常这样做,请在 ~/.ssh/config 中设置一个特殊的主机:
Host exportme
HostName B
RemoteForward remoteport A:targetport
Run Code Online (Sandbox Code Playgroud)
使用带有 sshfs 的 FUSE 项目,可以通过 SSH 挂载远程文件系统。在 Mac 上,使用 Fuse4x。
安装完成后,运行:
$ sshfs remote-host: local-mount-directory
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1732 次 |
最近记录: |