我无法通过 ssh 连接到要求diffie-hellman-group1-sha1密钥交换方法的服务器:
ssh 123.123.123.123
Unable to negotiate with 123.123.123.123 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
Run Code Online (Sandbox Code Playgroud)
如何diffie-hellman-group1-sha1在 Debian 8.0 上启用密钥交换方法?
我曾尝试(如建议在这里),以
将以下行添加到我的 /etc/ssh/ssh_config
KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
Ciphers 3des-cbc,blowfish-cbc,aes128-cbc,aes128-ctr,aes256-ctr
Run Code Online (Sandbox Code Playgroud)重新生成密钥
ssh-keygen -A
Run Code Online (Sandbox Code Playgroud)重新启动 ssh
service ssh restart
Run Code Online (Sandbox Code Playgroud)
但仍然得到错误。
的ssh-keygen产生以下输出:
The key fingerprint is:
dd:e7:25:b3:e2:5b:d9:f0:25:28:9d:50:a2:c9:44:97 user@machine
The key's randomart image is:
+--[ RSA 2048]----+
| .o o.. |
| o +Eo |
| + . |
| . + o |
| S o = * o|
| . o @.|
| . = o|
| . o |
| o. |
+-----------------+
Run Code Online (Sandbox Code Playgroud)
此图像的目的是什么,它是否为用户提供任何价值?请注意,这是客户端(用户)密钥,而不是主机密钥。
我有两台服务器。两台服务器都在 CentOS 5.6 中。我想使用我拥有的私钥(OpenSSH SSH-2 私钥)从服务器 1 SSH 到服务器 2。
我不知道如何通过 unix 做到这一点。但是我在 Windows 上使用 Putty 所做的是将我的 OpenSSH 私钥提供给 putty-gen 并生成 PPK 格式的私钥。
但是,我将从服务器 1 创建一个 bash 脚本,该脚本将通过 SSH 在服务器 2 上执行一些命令。
如何使用来自服务器 1 的私钥文件通过 SSH 连接到服务器 2?
我已经阅读了官方定义:
ssh-agent是一个保存用于公钥认证(RSA、DSA、ECDSA)的私钥的程序。这个想法是 ssh-agent 在 X 会话或登录会话的开始时启动,所有其他窗口或程序都作为 ssh-agent 程序的客户端启动。通过使用环境变量,可以定位代理并在使用 ssh(1) 登录其他机器时自动用于身份验证。
“一个保存私钥的程序” - 恕我直言,ssh 密钥由用户使用ssh-keygen命令生成并简单地存储在~/.ssh- 为什么我需要一些守护程序来保存这些密钥?它究竟是如何容纳它们的?- 它们不只是存储在.ssh吗?
“作为 ssh-agent 程序的客户端启动” - 我不明白。哪里需要那个?我通常只使用 ssh 如下:
ssh -i ~/.ssh/private_key_name username@hostname
Run Code Online (Sandbox Code Playgroud)
上述定义中的“客户”究竟是什么意思?什么客户?难道你不只是ssh从终端运行命令来连接到另一台机器吗?还有哪些其他客户端,为什么他们不能像ssh命令一样使用该私钥文件的标准路径?
我知道它的作用,但我不知道为什么。它可以防止什么攻击?
它与所有类型的身份验证方法相关吗?(基于主机、密码、公钥、键盘交互...)
我在标准位置找不到我的 sshd 日志。
我试过的:
/var/log/auth.log/var/log/secure'auth.log'没有发现/etc/ssh/sshd_config为显式使用SyslogFacility AUTH和LogLevel INFO重新启动 sshd,但仍然找不到它们。我在 Arch Linux 上使用 OpenSSH 6.5p1-2。
有没有办法构建单个命令以通过 SSH 登录到远程服务器并在远程登录 shell 上运行程序?
在 OpenSSH 手册中,它写着“如果指定了命令,它将在远程主机而不是登录 shell 上执行”。因此,例如,ssh user@server mail将登录到远程服务器,显示邮箱状态,然后将您返回到本地 shell。有没有办法在显示邮件状态后留在远程shell?
此外,ssh user@server [command]如果命令是程序,例如 vim 或 mutt ,则似乎不起作用。有没有办法登录到远程 shell 并运行程序,同时在程序运行期间和退出程序后留在远程 shell 中,最终仅在执行特定logout命令时退出(就像在正常的 SSH 会话中一样)?
我最终希望能够将这样的命令作为别名放在本地 .bashrc 中,以便在需要时可以快速运行。一个例子是通过 SSH 登录到远程服务器并在远程服务器上打开 mutt 来阅读或发送电子邮件。
我在生成 opensslPEM_read_bio_RSA_PUBKEY()函数可以使用的公钥时遇到问题。我不断收到错误。
显然我不能简单地在ssh-keygen <>.pub密钥文件中使用 ASCII 字符串,因为它是 SSH 文件格式,或者我可能是SubjectPublicKeyInfo结构。
这是密钥生成代码: ssh-keygen -t rsa -b 1024 -C "Test Key"
我在网络上的 php 中找到了一个转换器,它将公钥的内容转换为 base64 PEM ASCII 字符串格式。然而,该功能仍然不喜欢它。
Openssl 文档指出:
如何将我的 OpenSSH 公钥转换为 OpenSSL 函数将使用它的任一格式?
我Match在 OpenSSH 中/etc/ssh/sshd_config(在 debian 上)使用一个块来限制一些用户使用 SFTP:
# my stuff
Match group sftponly
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -u 0002
ChrootDirectory %h
Run Code Online (Sandbox Code Playgroud)
如您所见,我#my stuff在自定义配置文件中使用注释来轻松区分默认配置和我所做的配置(并将它们放在配置文件的末尾)。
现在我想将指令附加UseDNS no到配置中(以加快登录速度),但 OpenSSH 说Directive 'UseDNS' is not allowed within a Match block.
现在我想知道是否有类似于End Match结束这些匹配块的语法?
我知道如何使用 ssh 连接到某个端口。
ssh user@remotehostip -p XXX
Run Code Online (Sandbox Code Playgroud)
有没有办法从我的本地计算机将使用的端口建立 ssh ?