我正在尝试使用 Putty 在服务器和笔记本电脑之间建立隧道。问题是,由于笔记本电脑没有公共IP地址,我必须进行反向连接。
ASCII 艺术作品:
SERVER(PORT:6000) ----------> LAPTOP(PORT:7000)
Run Code Online (Sandbox Code Playgroud)
但是,由于笔记本电脑没有公共 IP 地址,我必须:
SERVER(PORT:6000) <---------- LAPTOP(PORT:7000)
Run Code Online (Sandbox Code Playgroud)
但是,来自的所有数据都将从服务器传输到笔记本电脑。
几个月来,我一直通过 SSH 隧道连接到在我们本地测试服务器上运行的 MySQL 实例,没有任何问题。突然之间,我想不出任何变化,服务器开始拒绝来自 Sequel Pro 的登录尝试,并出现以下错误:
无法连接到主机 127.0.0.1,因为访问被拒绝。
仔细检查您的用户名和密码,并确保允许从您当前的位置访问。
MySQL 说:用户 'root'@'localhost' 拒绝访问(使用密码:是)
当通过 SSH 直接连接到服务器时,我可以从终端登录,而不是通过 SSH 隧道。问题并非特定于 Sequel Pro,也不是特定于我自己,我在通过 MySQL Workbench 连接时遇到了与办公室其他人相同的错误。mysqladmin为了理智,我重置了密码,这绝对不是问题。
当我开始深入研究它时,我注意到错误将服务器报告为“localhost”,而不是我在 Sequel Pro 中输入的“127.0.0.1”。一位朋友建议这可能只是错误处理不好,但考虑到 MySQL 中 localhost 和 127.0.0.1 之间的显着差异,这似乎很奇怪。
为了解决隧道问题,我授予了对 root@% 的访问权限,以便我可以直接连接。这在大多数情况下都有效,我可以查看表数据、创建新数据库等。唯一的问题是当我创建用户时出现错误:
用户 'root'@'%' 的访问被拒绝(使用密码:YES)
奇怪的是用户实际上是创建的,我认为这只是授权的问题。尽管如此,从终端我可以在以 root 身份登录时做任何事情。
任何人都可以帮助阐明为什么隧道连接和(可能)grant 命令收到访问被拒绝错误?
作为参考,MySQ 是 5.6.16 版,大部分为默认设置,通过 Homebrew 安装在 MAC OS X 服务器机器上。
更新
以下是当前授予 root 访问权限的主机列表:
mysql> select host,user from mysql.user where user='root';
+----------------+------+
| host | user |
+----------------+------+
| % | root …Run Code Online (Sandbox Code Playgroud) 如何获取打开的 SSH 隧道列表?
我正在使用连接到 FreeBSD 服务器的 Mac OS X 客户端。我正在尝试查询客户端上的开放隧道。
我已经通过 autossh 建立了一个隧道。
这有效:
autossh -M 33201 -N -i myIdFile -R 33101:localhost:22 autossh@myhost.com
Run Code Online (Sandbox Code Playgroud)
我想在后台运行 autossh。使用该-f选项似乎很容易。
但是,这不起作用:
autossh -f -M 33201 -N -i myIdFile -R 33101:localhost:22 autossh@myhost.com
Run Code Online (Sandbox Code Playgroud)
Autossh 在后台正常运行,但 ssh 连接似乎每次都失败。在 /var/syslog 中,我看到多次出现:
autossh[3420]: ssh exited with error status 255; restarting ssh
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?一个疯狂的猜测是它与通过密钥文件的身份验证有关。我该如何调试(将 -v 添加到 ssh 选项似乎没有记录到任何地方)。
编辑: 我使用 -y 选项获得了一些 ssh 日志
/usr/bin/ssh[3484]: debug1: Next authentication method: publickey
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_rsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_dsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_ecdsa
/usr/bin/ssh[3484]: debug1: …Run Code Online (Sandbox Code Playgroud) 我有一个可公开访问的网络堡垒example.compute-1.amazonaws.com和一个私有的 postgres 数据库实例postgres.example.us-east-1.rds.amazonaws.com:5432
我可以使用 ssh 进入堡垒
$ ssh -i key.pem ec2-user@example.compute-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
然后,一旦我进入堡垒,我就会创建一个 ssh 隧道:
$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
然后,我可以通过使用 localhost 从堡垒连接到数据库来验证隧道是否正常工作:
$ psql -p 5432 -h localhost -U postgres
Run Code Online (Sandbox Code Playgroud)
但是,我无法远程连接到数据库(不在堡垒中)。
$ psql -p 5432 -h example.compute-1.amazonaws.com -U postgres
psql: could not connect to server: Connection refused
Is the server running on host "example.compute-1.amazonaws.com" () and accepting
TCP/IP connections on port 5432?
Run Code Online (Sandbox Code Playgroud)
我已将堡垒的安全组配置为接受端口 5432 上的入站流量。
我使用ssh -L正确吗?我应该在堡垒外使用它吗?任何建议将不胜感激。
我正在尝试使用 SSH 做一些非常不寻常的事情(无论如何对我来说),但我无法让它工作,希望你能帮忙。
我想使用 SSH 从我的 Mac 建立到远程服务器的连接。到现在为止还挺好。现在棘手的一点是,建立到远程服务器的连接后,我想启动从远程服务器 BACK 到本地计算机的连接。我知道,疯了。基本上我需要跳过这些圈子才能浏览远程服务器,然后将文件信息发送回我的本地机器,以便本地机器上的应用程序可以处理它。希望这是有道理的!
目前,如果我在登录到远程服务器后通过 SSH 返回到本地计算机,终端将只是坐在那里呼呼作响,即使使用 -v 也不会出错。
我试图通过查看 $SSH_CLIENT 变量的输出来发现我应该在哪里调用,但我使用的是标准的 vanilla 互联网连接(没有静态 IP 地址),我认为这可能是导致问题的原因。
我已经建立的东西:我在 Mac(OS X 10.6.4)上并且我在系统首选项/共享中启用了远程登录如果我尝试从局域网上的另一台机器通过 SSH 连接到我的 mac,我可以连接没有问题。如果我尝试从我的远程服务器通过 SSH 连接到另一台服务器(不是我的本地机器),我可以毫无问题地连接。
所以上述事实让我觉得我对本地和远程机器上的防火墙等很清楚。
我敢肯定我在这里一定遗漏了一些很明显的东西,但对于我的生活,我无法处理它。
任何帮助,链接或朝着正确方向的一般轻推将不胜感激!
我有一个需要 FTP 且无法执行 SFTP 的旧版应用程序。
我的解决办法是:
我想知道我是否可以将 VSFTPD 配置为除了防火墙之外忽略来自除本地主机之外的任何地方的连接。腰带和护腕都有。
我有两台机器,客户端和服务器。
客户端(位于公司防火墙后面)使用以下命令打开一个到服务器的反向 SSH 隧道,服务器具有可公开访问的 IP 地址:
ssh -nNT -R0:localhost:2222 insecure@server.example.com
在 OpenSSH 5.3+ 中,紧随0其后的-R意思是“选择一个可用端口”,而不是明确调用一个。我这样做的原因是因为我不想选择一个已经在使用的端口。事实上,实际上有很多客户端需要建立类似的隧道。
此时的问题是服务器不知道哪个客户端是哪个。如果我们想连接回这些客户端之一(通过本地主机),那么我们如何知道哪个端口指的是哪个客户端?
我知道以上述方式使用时,ssh 会将端口号报告给命令行。但是,我也想使用 autossh 来保持会话的活动。autossh 大概通过 fork/exec 运行其子进程,因此实际 ssh 命令的输出在以太中丢失。
此外,我想不出任何其他方式从客户端获取远程端口。因此,我想知道是否有办法确定服务器上的此端口。
我的一个想法是以某种方式使用 /etc/sshrc,它应该是一个为每个连接运行的脚本。但是,我不知道如何在这里获得相关信息(也许是处理该连接的特定 sshd 进程的 PID?)我希望得到一些指针。
谢谢!
我有一个位于 NAT 后面的远程主机。我想通过 ssh 从我家庭网络中的 TARGET 主机连接到 SOURCE。因此,我在 SOURCE 上发出以下命令:
ssh -R 2222:localhost:22 TARGET -N
Run Code Online (Sandbox Code Playgroud)
现在从 TARGET 我可以通过ssh -p 2222 localhost. 美好的
在 TARGET 的同一网络中使用平板电脑,我希望这能正常工作:
ssh -p 2222 TARGET
Run Code Online (Sandbox Code Playgroud)
相反,它看起来像 TARGET 只接受来自本地主机的端口 2222 上的连接。以下是关于 TARGET:
user@TARGET:~/$ netstat -l | grep 2222
tcp 0 0 localhost:2222 *:* LISTEN
tcp6 0 0 localhost:2222 [::]:* LISTEN
Run Code Online (Sandbox Code Playgroud)
有没有办法让远程端ssh -R接受来自其所有接口的连接?
通过 Ansible 管理多台服务器,目前超过 90 台,有 3 个 devops。一切都很好,但是现在存在一个巨大的安全问题。每个 devop 都使用自己的本地 ssh 密钥来直接访问服务器。每个 devop 都使用一台笔记本电脑,每台笔记本电脑都可能受到威胁,从而使整个生产服务器网络容易受到攻击。
我正在寻找一种集中管理访问的解决方案,从而阻止对任何给定密钥的访问。与将密钥添加到 bitbucket 或 github 的方式没有什么不同。
在我的头顶上,我认为解决方案是从一台机器(网关)到所需产品服务器的隧道......在传递网关时,请求将获取一个新密钥并用于访问产品服务器。结果是我们只需拒绝对网关的访问,就可以在几秒钟内快速有效地终止对任何 devop 的访问。
这是好逻辑吗?有没有人已经看到了解决这个问题的解决方案?