我刚刚在我的桌面系统上安装了Fedora 11 ,并想要sshd工作。 这些是我所做的步骤:
system-config-firewall启用sshd作为受信任的服务 service restart sshd 到本地主机的SSH连接是可能的,但是我仍然不能使用来自远程机器的SSH连接。 有什么我失踪?
1禁用防火墙到主机(只有足够长的时间来validation它不是防火墙
2打开一个terminal, su进入root用户,然后input/etc/init.d/sshd start这样至less会给你任何你可能看到的错误。 希望它会承认开始
3 启用防火墙通过从远程主机连接来validation防火墙不是问题
从这个任何错误,如果你发布,我们都可以帮助。
您可能会注意到在步骤2中,计算机正在生成您的密钥,这可能还没有尽快完成。 这可以解释为什么它不能提前工作。 如果它没有创build密钥,那就意味着它们是以前生成的,而且还可以
我犯了一个愚蠢的错误。
问题是我试图访问错误的IP地址。 一旦机器重新启动,IP地址就被DHCP改变了,我一直试图访问旧的IP地址。
这就是为什么本地SSH连接工作,但不是远程的原因。 我应该先运行ifconfig来检查IP地址。
应该只有两个步骤:
system-config-firewall启用sshd作为受信任的服务 service sshd start启动sshd作为服务 第二步确保密钥已经生成。 SELinux根本不需要被触及。
SELinux在这里不是问题。 不要禁用SELinux或将其设置为宽容模式。 绝对没有理由这样做。 我的笔记本电脑自4月初开始运行F11,SELinux在强制模式下没有任何问题。
例如,当您手动创build密钥并将它们放在/ etc / ssh中时,SELinux只会成为一个问题,但由于这不是问题,所以请单独使用SELinux。
Fedora没有非常奇怪的hosts.deny规则,例如Arch的规则,也没有在默认情况下阻止iptables中的ssh。
请在你试图启动sshd的时候发布/ var / log / secure和/ var / log / messages的输出,我会看看我能不能帮你。
使用此命令可systemctl enable sshd.service SSHD systemctl enable sshd.service
su - systemctl enable sshd.service systemctl start sshd.service
你很可能有selinux运行; 最近的Fedora安装默认情况下启用了这个function,并且有一套相当严格的策略。
您可能还想检查/ etc中的hosts.deny和hosts.allow文件。 在某些发行版中,默认情况下会设置为阻止来自外部源的所有连接,但允许来自本地机器的任何连接。 这可能是您为什么能够本地连接而不是来自远程系统的原因。
如果hosts.deny具有“ALL:*”或者“ALL:PARANOID”行并且未注释,那么这将拒绝hosts.allow文件中未明确允许的来自外部源的所有连接。 这是某些发行版中的默认状态,因为它有助于从外部篡改系统,从一开始就locking系统。 如果该文件没有任何内容,但这不是问题。
假设hosts.deny中存在“ALL:PARANOID”行,并且您将其保留,为了启用来自特定源的ssh连接,您需要将“sshd:”行添加到hosts.allow文件中。 可以是特定的IP,FQDN或通配版本(即sshd:192.168.0。*或* .mydomain.net)。 这个文件通常有一个“ALL:127.0.0.1”行,允许来自本地机器的任何types的连接,这就是为什么ssh可能在本地机器上工作,而不是从外部机器上工作。
一些debugging方法:
你有没有证实,sshd实际上是在运行。 例如ps aux|grep sshd和netstat -nltp|grep 22 (以root身份)
假设sshd正在运行,我们希望看到networkingstream量以及服务器的sshd进程和客户端ssh进程中发生了什么:
你可以SSH从主机loclhost?
打开/ etc / ssh / sshd_config中的ssh日志logging并检查日志。
tcpdump -i any tcp dst port 22 and src host <ssh_client_ip/host>服务器主机上的tcpdump -i any tcp dst port 22 and src host <ssh_client_ip/host>
tcpdump -i any tcp dst port 22 and dst host <ssh_server_ip/host>在客户端主机上
将strace -F -p <listening sshd process pid>附加到服务器上的sshd监听实例,看看发生了什么。
ssh到服务器,从strace运行客户端,即strace ssh <user>@<host> ,看看发生了什么
还要停止服务器上的sshd服务,并在debugging模式下从命令行运行sshd守护进程。 例如:
service sshd stop;pkill sshd
sshd -d3
要么
service sshd stop;pkill sshd
strace sshd -d3 。
-d3以高debugging级别运行sshd并停止分离/分叉。 也就是说,这将是唯一的实例运行,输出应该去你的terminal
您可能还希望在客户端命令行上使用-oLogLevel=DEBUG使其变得更加嘈杂。
如果您正在使用密钥进行身份validation,请检查您的密钥是否位于e,g, ~/.ssh 。 例如chown -R ${USERID}. .sshd; chmod -R 700 .sshd chown -R ${USERID}. .sshd; chmod -R 700 .sshd chown -R ${USERID}. .sshd; chmod -R 700 .sshd 。
确保已configuration并正在运行:
chkconfig --list sshd service sshd status
一旦我知道它正在运行,我检查,以确保它会在启动时出现。 接下来,为了使其工作,我将以下规则添加到/ etc / sysconfig / iptables中:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
然后我重新启动iptables,使用:
service iptables restart
我还通过编辑/etc/selinux/config和设置禁用了SELINUX:
SELINUX=disabled
我可能已经重新启动,以确保。 这些是获取远程SSHlogin的步骤。
注:我已configurationsshd.conf不允许rootlogin。 如果您尝试以root用户身份login,请仔细检查您当前的sshd.conf文件。 出于安全原因,允许root远程login不是明智之举。