我已经在网上做了一些研究,最好的解决方案似乎是使用更好的算法来生成新的密钥对。但现在我仍然需要使用 ssh-dss 密钥对进行内部自动化。
(我知道从openssh 7.0开始,ssh-dss默认是禁用的,我们需要显式添加
PubkeyAcceptedKeyTypes +ssh-dss到ssh配置中才能重新启用它。)
环境:
OpenSSH_8.0p1, OpenSSL 1.1.1c FIPS 28 May 2019
Linux hostname 5.1.19-300.fc30.x86_64 #1 SMP Mon Jul 22 16:32:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所做的事情的清单:
.ssh文件夹,在 中设置公钥.ssh/authorized_keys,确保它们具有 700、600 权限和正确的所有者而不是 root。/etc/ssh/sshd_config,确保我们有PubkeyAuthentication yes(通常是默认值)ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss上添加/etc/ssh/sshd_configPubkeyAcceptedKeyTypes +ssh-dss在服务器端~/.ssh/config和客户端都添加但是,我仍然被要求输入密码。
/var/log/secure,我看到:
userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes
ssh -Q key:ssh-ed25519 …Run Code Online (Sandbox Code Playgroud) 我正在使用以下链接:
https://help.github.com/en/articles/generate-a-new-ssh-key-and-adding-it-to-the-ssh-agent
当我复制并粘贴:$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com",在引用中替换我自己的 github 电子邮件时,我收到错误。
这是我粘贴的内容和收到的错误:
$ $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
bash: $: command not found
Run Code Online (Sandbox Code Playgroud)
谁能帮我吗?
我设置了 Windows 10 的 OpenSSH 服务器,通过本文中描述的方法建立到 WSL2 bash 的 ssh 连接:“THE EASY WAY how to SSH into Bash and WSL2 on Windows 10 from an external machine”,以及本文档:“OpenSSH key管理”。
总之,我以管理员身份在 PowerShell 上运行以下命令:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\WINDOWS\System32\bash.exe" -PropertyType String -Force
Run Code Online (Sandbox Code Playgroud)
之后,我可以ssh <my Windows username>@localhost使用 Windows 密码通过 ssh 从 PowerShell 连接到本地主机上的 WSL2 bash。
接下来,我想不使用密码而是使用密钥对进行连接。因此,我在 PowerShell 上创建了一个密钥对并将其定位为C:\Users\<my Windows username>\.ssh\authorized_keys.
cd C:\Users\<my Windows username>\.ssh
ssh-keygen -t ed25519 -f …Run Code Online (Sandbox Code Playgroud) 我阅读了以下教程
我确认ssh-keyscan 192.168.1.X扫描并打印服务器/主机的所有 公钥值 - 该输出来自服务器/主机的以下文件
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key.pub
Run Code Online (Sandbox Code Playgroud)
我可以通过以下选项过滤它们:-t
ssh-keyscan -t key_type 192.168.1.X哪里key_type可以rsa,ecdsa和ed25519甚至混合,例如:rsa,ecdsa
例如:
ssh-keyscan -t rsa 192.168.1.X到目前为止,我理解了该命令的所有这两种变体。我在我的电脑上确认了该行为
现在,在对这个命令进行研究之后,这篇文章的原因是:
两者都提到了该/etc/ssh/ssh_known_hosts文件,存在
如果在未验证密钥的情况
ssh_known_hosts下构建文件ssh-keyscan,用户将容易受到中间人攻击。另一方面,如果安全模型允许这种风险,则 可以帮助检测在文件创建ssh-keyscan后开始的被篡改的密钥文件或中间人攻击ssh_known_hosts
不清楚是否自动ssh_known_hosts创建/构造或使用某些选项,例如-c- 我知道该选项不存在。
那么该文件在客户端中不存在 - 我假设在命令执行之后应该自动生成或创建该文件 - 该路径和文件名出于某种明确的原因而存在,对吗?- 类似于使用命令并被客户端接受服务器指纹.ssh/known_hosts时创建/更新文件的方式ssh username@hostname
我想找到一种更简单的方法来从私有 GitHub 存储库获取文件。
我通过在 GitHub 上创建个人访问令牌来下载文件curl,然后像这样使用它:
curl https://MY_TOKEN@raw.githubusercontent.com/accountName/repoName/branchName/fileName.txt
Run Code Online (Sandbox Code Playgroud)
这对我有用,但是我想知道是否有更简单的方法,也许使用 SSH?我不介意输入 SSH 密码,因为它似乎比创建访问令牌更方便。我已经可以在 GitHub 上成功验证:
$ ssh -T git@github.com
# Attempts to ssh to GitHub
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用curlSSH URL 时,出现以下错误:
curl ssh://git@github.com:accountName/repoName/branchName/fileName.txt
curl: (3) URL using bad/illegal format or missing URL
Run Code Online (Sandbox Code Playgroud)
我尝试了本文中描述的其他一些方法,但无济于事。
有任何想法吗?
我想使用 ssh-keygen 实用程序生成 rsa-sha2-256 ssh 密钥对。您能分享相同的命令吗?
对于 ssh-rsa 来说,它是ssh-keygen -t rsa
我有两个可以使用 SSH 连接的 QNAP:
\n在 TS-851 上,登录后,如果我在键盘上输入“\xc3\xa9”,屏幕上会显示“\xc3\xa9”。另一方面,TS-412 不会在屏幕上打印字符。因此,我无法访问任何包含重音字符的内容(仍然通过 SSH)。
\n我进行了搜索,发现的都是有关 SMB 问题,但这不是我的情况。共享文件夹正确显示。通过 SSH 列出文件夹会显示所有重音字符。但是,键入并粘贴并不会进入该框。甚至路径的自动完成也会去除重音字符。
\n两者的区域设置相同。一切看起来都一样,但显然有些东西不一样。
\n我知道 QNAP 有自己的 Linux 风格,我已经在他们的论坛中询问过,但以防万一这里有人知道。因为,我认为这个问题看起来更像是一个通用的 Linux 问题(并不是说一切都结束了,但它不是 QNAP 特有的)。
\n这实在是太烦人了!
\n在我的电脑上执行locale:
LANG=C.UTF-8\nLANGUAGE=\nLC_CTYPE="C.UTF-8"\nLC_NUMERIC="C.UTF-8"\nLC_TIME="C.UTF-8"\nLC_COLLATE="C.UTF-8"\nLC_MONETARY="C.UTF-8"\nLC_MESSAGES="C.UTF-8"\nLC_PAPER="C.UTF-8"\nLC_NAME="C.UTF-8"\nLC_ADDRESS="C.UTF-8"\nLC_TELEPHONE="C.UTF-8"\nLC_MEASUREMENT="C.UTF-8"\nLC_IDENTIFICATION="C.UTF-8"\nLC_ALL=\nRun Code Online (Sandbox Code Playgroud)\nlocale在 TS-412 上执行:
LANG=en_US.UTF-8\nLC_CTYPE="en_US.UTF-8"\nLC_NUMERIC="en_US.UTF-8"\nLC_TIME="en_US.UTF-8"\nLC_COLLATE="en_US.UTF-8"\nLC_MONETARY="en_US.UTF-8"\nLC_MESSAGES="en_US.UTF-8"\nLC_PAPER="en_US.UTF-8"\nLC_NAME="en_US.UTF-8"\nLC_ADDRESS="en_US.UTF-8"\nLC_TELEPHONE="en_US.UTF-8"\nLC_MEASUREMENT="en_US.UTF-8"\nLC_IDENTIFICATION="en_US.UTF-8"\nLC_ALL=en_US.UTF-8\nRun Code Online (Sandbox Code Playgroud)\nlocale在 TS-851 上执行:
LANG=en_US.UTF-8\nLC_CTYPE="en_US.UTF-8"\nLC_NUMERIC="en_US.UTF-8"\nLC_TIME="en_US.UTF-8"\nLC_COLLATE="en_US.UTF-8"\nLC_MONETARY="en_US.UTF-8"\nLC_MESSAGES="en_US.UTF-8"\nLC_PAPER="en_US.UTF-8"\nLC_NAME="en_US.UTF-8"\nLC_ADDRESS="en_US.UTF-8"\nLC_TELEPHONE="en_US.UTF-8"\nLC_MEASUREMENT="en_US.UTF-8"\nLC_IDENTIFICATION="en_US.UTF-8"\nLC_ALL=en_US.UTF-8\nRun Code Online (Sandbox Code Playgroud)\n所有机器上的输出echo $TERM $SHELL相同:
xterm-256color /bin/bash\nRun Code Online (Sandbox Code Playgroud)\n在我的计算机上的输出uname -a,TS-412,TS-851(按顺序):
Linux COMPUTER_NAME 5.10.102.1-microsoft-standard-WSL2 #1 …Run Code Online (Sandbox Code Playgroud) 我有一台 Windows 10 Pro 计算机,我可以ssh将其作为cmd. 我希望将 shell 设置为powershell.exe(不是默认的cmd.exe)。
C:\ProgramData\ssh\sshd我尝试在本文中设置以下内容,然后设置Restart-Service sshd,但这不起作用:
Subsystem powershell c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -sshs -NoLogo -NoProfile
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
Subsystem powershell C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -sshs -NoLogo -NoProfile
Run Code Online (Sandbox Code Playgroud)
我已经确认C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exePowerShell的位置正确。
如何使 shell 成为 PowerShell 以ssh访问 Windows 主机?
总的来说,我是网络知识的初学者。尝试将其发布在网络工程堆栈交换中,但他们将我发送到这里。我的主要目标是能够模拟设备,以便我可以从 Python 应用程序通过 SSH 连接到该设备并获取命令的输出。但首先,我尝试从终端手动通过 SSH 连接到设备。
我使用 GNS3 来模拟网络和 CISCO C7200 图像。我正在使用 Manjaro Linux。我的拓扑:
路由器配置:
conf t
hostname R1
ip domain-name local
crypto key generate rsa
ip ssh version 2
line vty 0 4
transport input ssh
login local
exit
username admin password 1234
exit
Run Code Online (Sandbox Code Playgroud)
从终端,我可以远程登录到它,运行良好:
telnet 127.0.0.1 5001
但是当我跑步时:
ssh admin@127.0.0.1 -p 5001
终端挂起并且 R1 控制台输出以下内容:
我究竟做错了什么?
第一次尝试 linux 发行版。尝试使用 vmware fusion 在我的 Mac 上将 JeOS 作为虚拟机运行。安装 ubuntu server 9.04 最小虚拟机。安装ssh。安装了 VMwareTools。
现在我正在尝试从我的 mac 更改共享文件夹的权限。我在终端中输入此命令“sudo vi /etc/fstab”,同时 ssh 进入我的虚拟机。如何编辑它从命令行显示的任何类型的文本文件。我的向上和向下箭头最终只会放入随机字母,我无法输入我想要的位置。
基本上尝试遵循本指南:http : //intranation.com/entries/2009/03/development-virtual-machines-os-x-using-vmware-and/
我正处于最后一步,它尝试获得对共享 Projects 文件夹的读写权限。
谢谢
ssh ×10
openssh ×4
linux ×3
git ×2
ssh-keys ×2
bash ×1
curl ×1
download ×1
fedora ×1
github ×1
gns3 ×1
keyboard ×1
networking ×1
permissions ×1
powershell ×1
qnap ×1
rsa ×1
security ×1
shell ×1
ssh-keygen ×1
sshd ×1
ubuntu ×1
vim ×1
windows ×1
windows-10 ×1
windows-subsystem-for-linux ×1
wsl2 ×1