我曾在一些地方工作,在这些地方,能够以管理员身份使用 SSH 在所有服务器之间移动是一种常见做法,无需密码。通常有几个服务器,从本质上讲,它们被认为更安全(不会暴露在网络上等),您可以从这些服务器无需密码即可登录到其他人。相反的情况也发生了 - 您需要密码/其他访问控制机制来处理所有事情。
从安全角度来看,我强烈反对第一个公式。虽然可以认为这组服务器更安全,但这显然值得商榷。但是我有几个同事提倡这个,我不得不承认它非常方便。在任何情况下,如果攻击者可以在一台机器上获得 root 权限,那么它基本上“拥有”整个系统。
我对安全性太严格了吗?
我已经ufw firewall在我的小型服务器上安装了 ssh 和 Web 服务。但是,启用后,ssh 连接丢失,我无法通过 Web 浏览器连接到托管 Web。
发生了什么事?
我的设置如下所示:
+--------+ +----------+ +-----------+
| Laptop | <---> | Middle | <--> | Server |
+--------+ +----------+ +-----------+
Run Code Online (Sandbox Code Playgroud)
服务器在 TCP:127.0.0.1:8081 上运行 Web 服务器。所有的机器都在运行 SSH,我拥有一切的凭据。
在中间出现盒子之前,我的 SSH 配置曾经是这样写的:
Host server
Hostname server.internal.tld
User ubuntu
IdentityFile ~/.ssh/some_key.pem
Port 20022
LocalForward 8081 localhost:8081
ServerAliveInterval 60
KeepAlive yes
ServerAliveCountMax 1
Run Code Online (Sandbox Code Playgroud)
这让我可以通过浏览到浏览器中的页面localhost:8081。
是否有一行可以添加到我的 SSH 配置中以获得相同的结果,因为中间有一台我可以通过代理 SSH 的机器?这是以某种方式ProxyCommand使用的吗?这LocalForward条线还能用ProxyCommand吗?
当我运行命令时,netstat -tln我看到以下输出:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::8000 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::443 :::* LISTEN
Run Code Online (Sandbox Code Playgroud)
我理解除了0.0.0.0:22和之外的所有条目127.0.0.1:3306;为什么会有这些条目?
我使用 iptables 作为我的防火墙工具,想知道我是否需要禁用它以及该条目最初是如何显示的。
我知道那3306是针对 mysql 的。但是为什么 SSH 和 Mysql 有特定的 IP 地址,而其他服务器没有?
我正在尝试在 sudo-less 用户中的远程主机上获取我的 .bashrc 文件。我收到以下回复。
sh-4.2$ source .bash_profile
sh-4.2$ source: .bash_profile: file not found
sh-4.2$ source ~/.bash_profile
[user@hera ~]$
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种行为?
.bashrc 的内容
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
# added by Anaconda3 4.1.1 installer
export PATH="/home/tensorflow/anaconda3/bin:$PATH"
Run Code Online (Sandbox Code Playgroud) 在进行运行时apt upgrade,Tomcat 7 安装后脚本与 common A new version of configuration file /etc/default/tomcat7 is available.... 不幸的是,我没有足够快地处理它并且 SSH 连接被重置。我该如何从中恢复?我可以重新连接到安装后屏幕吗?杀死它安全吗?如果我杀死它,是否有我应该手动执行的脚本?
我看到了这个问题,这样做操作系统版本的升级,但无论哪种解决方案(screen -r)是不相关的或者说我没有正确使用它。
$ screen -r
There is no screen to be resumed.
Run Code Online (Sandbox Code Playgroud)
我可以看到正在运行的进程:
$ ps -a
PID TTY TIME CMD
416 pts/2 00:00:00 frontend
423 pts/2 00:00:00 tomcat7.postins
430 pts/2 00:00:00 ucf
475 pts/2 00:00:00 whiptail
634 pts/1 00:00:00 ps
Run Code Online (Sandbox Code Playgroud)
正如 Dmitry Zayats 所建议的,我查看了 Tomcat 7 安装后脚本。在我安装的 Ubuntu 14.04 中,它可以在这里找到:/var/lib/dpkg/info/tomcat7.postinst
打开它,我相信我看到了我最初失去连接的相关行:
ucf --debconf-ok --sum-file …
我正在启动这样的 ssh 隧道:
ssh -f -N $PORT:127.0.0.1:$port example.com
Run Code Online (Sandbox Code Playgroud)
在-f放ssh到后台,这就是我想要的。这是有效的,因为设置了 SSH 隧道。但是如果我使用,jobs我看不到列出的 ssh 连接。怎么来的?
我不是服务器管理员,但由于我正在做一些 Facebook Connect 编程,我需要在端口 80 上有一个面向公众的 URL 来转发到我的本地开发环境。所以我有一个基于 Centos 的 Web 服务器,并且我已经停止了 httpd(和 nginx)服务,但是当我尝试从端口 80 建立 SSH 隧道时它不起作用。据我所知,它适用于任何其他端口。
这基本上是我正在运行的命令:
ssh -v -p 22 -nNT4 -R *:80:localhost:3000 username@http://myurl.com
端口 80 是否以某种方式绑定在服务器上?我必须释放它还是什么?我环顾四周,发现它可能与我的 sshd_config 中的 GatewayPorts 设置有关 - 目前设置为“是”。
提前感谢您的任何建议!
卡梅伦
我在非标准端口上运行个人 ssh 服务器。如果有人尝试通过标准端口 22 登录我的 ssh 服务器,则服务器似乎发送“连接被拒绝”消息。
$ ssh localhost
ssh: connect to host localhost port 22: Connection refused
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它不发送这样的消息并且它的行为就像它没有运行一样?
在您尝试右键单击以显示上下文菜单之前,SSH 上的远程 Firefox 非常有用。上下文菜单出现大约需要 5 秒钟。似乎需要很多次往返。
ssh -c blowfish-cbc -C -Y host
Run Code Online (Sandbox Code Playgroud)
我相信使用上面的命令,它会更快。我听说河豚-cbc 密码速度很快,而且很安全。还有什么我应该看的吗?
但也许那只是安慰剂效应。我不知道如何准确计时这个 5 秒的事件。