这ssh-copy-id对于将公钥发送到服务器非常有用。但是如果你现在没有私钥文件,它就会失败。
$ ssh-copy-id -i my_friend_rsa.pub root@example.com
/usr/bin/ssh-copy-id: ERROR: failed to open ID file 'my_friend_rsa': No such file
Run Code Online (Sandbox Code Playgroud)
我不明白这种行为。
对我来说有两种情况:
第一种情况很少见。如果我可以连接到服务器,服务器已经有了我的公钥。所以ssh-copy-id在这种情况下我不需要。
第二种情况很常见。我授予其他用户访问权限。但我没有他或她的私钥。因此,这种行为使 ssh-copy-id 在第二种情况下无用。
请解释一下为什么ssh-copy-id需要私钥文件?
客户端是 Ubuntu 16.04 keychain,服务器是 FreeBSD 10.3。~/.ssh/authorized_keys服务器上只有一个密钥(这个密钥是 ECDSA p521 而不是 RSA),客户端里面有私钥和公钥~/.ssh。问题是客户端不断发送所有可用的 RSA 密钥~/.ssh- 请参阅此详细输出:
OpenSSH_7.2p2 Ubuntu-4, OpenSSL 1.0.2g-fips 1 Mar 2016
debug1: Reading configuration data /home/manuth/.ssh/config
debug1: /home/manuth/.ssh/config line 1: Applying options for r2d2.manuth.life
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to r2d2.manuth.life [103.12.163.90] port 900.
debug1: Connection established.
debug1: identity file /home/manuth/.ssh/dqar type 3
debug1: key_load_public: No such file or directory
debug1: identity file /home/manuth/.ssh/dqar-cert …Run Code Online (Sandbox Code Playgroud) 我熟悉配置 Linux 服务器以符合PCI-DSS 3.2 的一些更常见的方法,至少符合SAQ A的要求。一个常见的问题是要求 8.5,它要求:
通用用户 ID 和帐户被禁用或删除
这包括 root 用户,显然不能被禁用,因此需要“补偿控制”(在 PCI-DSS 的术语中)。一个常见的配方是以下的一些变体:
ssh才能使用 SSH 密钥;sudo获取root;pam_loginuid一旦用户有root,安装记录登录用户ID;和auditd以记录 root 操作和登录用户 ID。但是,如果我今天要处理,它不是我要保护的单一机器:它是一个小型集群(目前有 10 台机器),并且能够在机器之间ssh(和scp文件)进行(和文件)真的非常有用。作为非 root 用户必须这样做将是一个真正的痛苦:几乎总是你需要的文件只能被 root 读取,并且需要放在一些只有 root 可以写入的地方。
我想要做的是允许ssh在机器之间作为 root,使用服务器上存在的 SSH 密钥。这在块中使用命令很容易。我不太担心允许破坏一台机器的人控制整个集群的安全隐患:这些机器非常相似,如果他们设法破坏一台机器,他们可能可以使用相同的过程来访问其余的./etc/ssh/sshd_configPermitRootLoginMatch Address
但是,如果我这样做,我将失去跟踪谁在运行什么命令的能力,因为当我ssh到另一台机器时,没有登录 UID 不再附加到进程。PCI-DSS 中的补偿控制需要“满足原始 PCI DSS 要求的意图和严格性”,并且要求 8.5 的意图被声明为使“跟踪系统访问和活动到个人”成为可能。在不保留登录 UID 的情况下,我们不再为允许 root 用户存在提供补偿控制。 …
我正在使用这样的脚本:
rsync -avu --delete --progress user@host:~/backup .
Run Code Online (Sandbox Code Playgroud)
每次过一段时间后,都会收到此错误:
rsync: connection unexpectedly closed (10251754 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [receiver=3.1.0]
rsync: connection unexpectedly closed (45482 bytes received so far) [generator]
rsync error: unexplained error (code 255) at io.c(226) [generator=3.1.0]
# generator = Debian 5, rsync version 3.0.3 protocol version 30 (Generator[A])
# receiver = Ubuntu 14.04, rsync version 3.1.0 protocol version 31 (Receiver[A])
Run Code Online (Sandbox Code Playgroud)
我有十多年的经验rsync,我尝试了所有方法,但我无法弄清楚为什么会发生这种情况。
双方:我在日志中没有错误,在 …
我想在 debian 8 上运行两个 sshd 守护进程(使用 openssh),一个用于管理,一个用于 sftp。
这曾经在 debian 7 中很容易,但在 systemd 中则更加困难。
到目前为止,我已经创建了sshd_config_second和ssh_config_second.
我将如何为sshd_second.service守护进程创建服务文件并启动守护进程?
我查看了 sshd.service 但这没有引用该sshd_config文件。我在哪里向守护程序提供这些配置文件?
更新:
我从 RHEL7 遵循了这个并成功了:
你好社区几天我在保持连接到我执行到 VPS的ssh 隧道时遇到问题。2 到 4 分钟后,我收到此错误:隧道已关闭。packet_write_wait:连接到未知端口 0:管道损坏。我一直在论坛上阅读,但仍然找不到解决方案,这些是我的配置文件。值得一提的是,我通过代理(Squid)访问互联网。
在我的SSH 服务器(/etc/ssh/sshd_config) 上添加以下行:
ClientAliveInterval 60
ClientAliveCountMax 5
TCPKeepAlive no
Run Code Online (Sandbox Code Playgroud)
在我的SSH 客户端(~/.ssh/config) 上:
Host myhost
User root
ProxyCommand proxytunnel -p proxy.example.com:3128 -P userproxy:passwordproxy -d dominiovps.com:443 -v -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)"
ServerAliveInterval 60
ServerAliveCountMax 5
TCPKeepAlive no
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来确保我的命令在某些使用 csh 作为默认 shell 的 FreeBSD 11 机器上由 bash 执行。
以下是我在 Linux CentOS / Debian / MacOS X / pfSense 2.3(在 FreeBSD 10.3 上运行)甚至 Windows 10 bash 上运行的代码,但在 FreeBSD 11 上不起作用
cat "/some/filelist" | ssh -i "/home/user/.ssh/some_key" user@freebsd11 'bash -c "while read -r file; do stat -f \"%N;%c;%m\" \"\$file\"; done | sort"'
Run Code Online (Sandbox Code Playgroud)
FreeBSD 11 上前一个命令的输出似乎是一个 csh 错误消息
Unmatched ".
Run Code Online (Sandbox Code Playgroud)
在检查哪个 shell 运行时,似乎是 csh 运行。以下返回“csh”
ssh -i /home/user/.ssh/some_key user@freebsd11 'bash -c "echo $0"'
Run Code Online (Sandbox Code Playgroud)
根据我的理解,BSD 系统不允许更改 shell,除非使用 heredoc,但我不能使用 heredoc 发送 cat "/some/filelist" …
我无法使用公钥私钥对登录。我确实可以使用密码访问。以下是服务器端和客户端的日志。为什么我无法登录?
type=CRYPTO_KEY_USER msg=audit(1481731455.027:102046): user pid=8859 uid=0 auid=0 ses=6158 msg='op=destroy kind=session fp=? direction=both spid=8860 suid=74 rport=59031 laddr=XX.XXX.XX.XXX lport=22 exe="/usr/sbin/sshd" hostname=? addr=YY.YYY.YY.YYY terminal=? res=success'
type=USER_ERR msg=audit(1481731455.028:102047): user pid=8859 uid=0 auid=0 ses=6158 msg='op=PAM:bad_ident acct="?" exe="/usr/sbin/sshd" hostname=YY.YYY.YY.YYY addr=YY.YYY.YY.YYY terminal=ssh res=failed'
type=CRYPTO_KEY_USER msg=audit(1481731455.028:102048): user pid=8859 uid=0 auid=0 ses=6158 msg='op=destroy kind=server fp=6f:21:ce:5c:81:10:5e:63:db:32:54:71:80:bf:99:97 direction=? spid=8859 suid=0 exe="/usr/sbin/sshd" hostname=? addr=YY.YYY.YY.YYY terminal=? res=success'
type=CRYPTO_KEY_USER msg=audit(1481731455.028:102049): user pid=8859 uid=0 auid=0 ses=6158 msg='op=destroy kind=server fp=d7:a6:59:60:99:86:45:95:69:79:bf:ea:8a:fa:0a:46 direction=? spid=8859 suid=0 exe="/usr/sbin/sshd" hostname=? addr=YY.YYY.YY.YYY terminal=? res=success'
type=USER_LOGIN msg=audit(1481731455.028:102050): user pid=8859 uid=0 auid=0 ses=6158 msg='op=login …Run Code Online (Sandbox Code Playgroud) 总结: SSH 没有做任何事情。
> ssh user@www@.yserver.com
> ssh oshdfojsfsdof -psd sdfisdfjdsf
Run Code Online (Sandbox Code Playgroud)
(无论你传递给命令行什么都不做。没有输出,没有错误,什么都没有)
完整故事: 我最近安装了 Cygwin,这样我就可以使用 SSH 密钥运行一些 rsync,而不必弄清楚如何在 Windows 上进行设置。我让一切都运行得很好,但后来发现我需要安装 Cygwin 的更多部分才能让 cron 工作。我添加了一些软件包,但不可否认,我没有对我安装的软件包给予应有的关注。
我设置了 cron,第二天早上发现它不起作用。后来进行了大量调试,我意识到 rsync 给了我错误,因为 SSH 命令根本不想成为......好吧...... ssh。就好像我什么都没跑似的。
我很困惑,因为在再次运行 Cygwin 设置并添加其他包之前一切正常。
问题原因
我打算使用以下内容为“.hgignore”等隐藏文件添加组写权限:
#密码 /选择 # 须藤 chmod -R g+w .*
问题是 '..' 匹配这个模式,现在整个 RHEL 文件系统都设置了 g+w。眼前的问题如下:
题
为了重新获得远程登录的能力,需要指导可以物理访问服务器的人如何修复系统。
现在的问题是:什么重要的文件和目录,需要有自己的权限,才能恢复恢复ssh和sudo功能?
关于“关闭重复”的注意事项
问题为什么“chmod -R 777 /”具有破坏性?提供有关递归扩展权限可以产生什么效果的详细说明。此问题旨在回答如何通过 ssh 重新获得远程访问权限的问题,以便可以执行更广泛的恢复和修复。