标签: openssh

并行执行多个 scps 时,为什么 scp 偶尔会失败?

我有一个小型应用程序,它试图执行十几个并行的“scp”运行,从远程系统中提取文件。通常情况下,它运行良好。有时,一两个运行的SCP会悄然死去。(如果从 Linux 拉取,则“安静”。如果从 HP-UX 拉取,我会收到一条消息,例如“连接已被对等方重置”。)

如果我将“-v”添加到我的 scp 命令中,那么当发生故障时,我会看到我收到“ssh_exchange_identification:读取:连接由对等方重置”(在 Linux 上......还没有在 HP 上尝试过 -v -用户体验)。

这是典型运行的“scp -v”输出,其中指出了“坏”运行和“好”运行的分歧点:

Executing: program /usr/bin/ssh host wilbur, user (unspecified), command scp -v -p -f /home/sieler/source/misc/[p-q]*.[ch]
OpenSSH_6.9p1, LibreSSL 2.1.8
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 51: Applying options for *
debug1: Connecting to wilbur [10.84.3.61] port 22.
debug1: Connection established.
debug1: identity file /Users/sieler/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/sieler/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or …
Run Code Online (Sandbox Code Playgroud)

linux ssh scp openssh

2
推荐指数
1
解决办法
2911
查看次数

在 WSL 终端上接受密钥后 SSH 挂起

从 Git Repo(Bitbucket 和我的 Web 主机)推送和获取在 WSL 上停止工作。我发现通过 ssh 连接在 shell 提示符出现之前挂起。使用ssh -vvv显示了这一点(我删除了我认为不重要的东西):

debug1: Authentication succeeded (publickey).
Authenticated to XXX.XXXX ([XXX.XXX.XXX.XXX]:XX).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: open confirm rwindow 0 rmax 32768
Run Code Online (Sandbox Code Playgroud)

悬挂之前显示的上述内容的数量有所不同。这是有效的,但停止了。我已经更改了 ISP 和路由器(我已经从 ADSL 更改为 NBN),我认为这是原因,但我可以使用 PowerShell (使用 OpenSSH )连接到同一服务器。我尝试过创建新密钥,但得到了相同的结果。我只需要一些有关如何解决此问题的帮助。

我正在 WSL 2 上运行 Ubuntu 18.04.3 LTS(Windows Build 18999,我已经进入内部快速通道尝试修复,也无法在慢速通道上工作)。我在 WSL 上运行 OpenSSH_7.6p1 Ubuntu-4ubuntu0.3、OpenSSL 1.0.2n;以及 PowerShell 上的 OpenSSH_for_Windows_7.7p1、LibreSSL 2.6.5。

git ssh openssh windows-subsystem-for-linux

2
推荐指数
1
解决办法
2314
查看次数

使用 SSH.NET 连接到 OpenSSH 7.4p1 失败并显示“服务器响应在位置处包含空字符”但在 WinSCP 中有效

我正在尝试使用 SSH.NET (2020.0.0) 连接到 SFTP 服务器。

我的代码看起来很简单:

try
{
    var x  = new ConnectionInfo(FtpIpAddress, 22, FtpUser,
        new PasswordAuthenticationMethod(FtpUser, FtpPw));

    using (var sftpClient = new SftpClient(x))
    {
       sftpClient.Connect();
       sftpClient.Disconnect();
    }
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行代码时,出现以下错误:

try
{
    var x  = new ConnectionInfo(FtpIpAddress, 22, FtpUser,
        new PasswordAuthenticationMethod(FtpUser, FtpPw));

    using (var sftpClient = new SftpClient(x))
    {
       sftpClient.Connect();
       sftpClient.Disconnect();
    }
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决它,手动使用 WinSCP 时它工作正常,使用 WinSCP.NET 时,它与代码一起工作也很好。但是我不能在 Linux 发行版上使用 WinSCP.NET。

所以有人知道出了什么问题吗?

.net c# sftp openssh ssh.net

2
推荐指数
1
解决办法
271
查看次数

使用 Python Paramiko 在不同的 SSH 服务器中并行运行多个命令

我的SSH.py目标是通过 SSH 连接到许多服务器来运行 Python 脚本 ( worker.py)。我正在使用 Paramiko,但对它非常陌生,并且不断学习。在我通过 ssh 连接的每台服务器上,我需要保持 Python 脚本运行——这是为了并行训练模型,因此脚本需要在所有机器上运行,以便联合更新模型参数/训练。服务器上的 Python 脚本需要运行,因此要么所有 SSH 连接都无法关闭,要么我必须找到一种方法,让服务器上的 Python 脚本即使关闭连接也能继续运行。

从广泛的谷歌搜索来看,您似乎可以通过nohup以下方式实现此目的:

client = paramiko.SSHClient()
client.connect(ip_address, username, password)
transport = client.get_transport()
channel = transport.open_session()
channel.exec_command("python worker.py > /logs/'command output' 2>&1")
Run Code Online (Sandbox Code Playgroud)

但是,我不清楚如何关闭/退出所有 SSH 连接?我正在运行该SSH.py文件cmd.exe,关闭该cmd.exe文件是否足以远程关闭所有进程?

此外,我的使用是否client.close()符合我的目的?请参阅下面我的代码。

# SSH.py

import paramiko
import argparse
import os

path = "path"
python_script = "worker.py"

# definitions for ssh connection and cluster
ip_list = ['XXX.XXX.XXX.XXX', XXX.XXX.XXX.XXX', XXX.XXX.XXX.XXX'] …
Run Code Online (Sandbox Code Playgroud)

python windows ssh openssh paramiko

2
推荐指数
1
解决办法
8947
查看次数

将 RSA 转换为 OPENSSH

我先说我对证书/密钥非常缺乏经验,而且我使用的是 Mac。

我的问题是 RSA 和 OPENSSH 证书/密钥。我目前有一个有效的 RSA 证书/密钥,但我需要将它们转换为 OpenSSH。根据我的理解,我想做与此线程相反的操作:Openssh Private Key to RSA Private Key

我有一个以以下内容开头的文件:

-----BEGIN RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

但我需要将其转换为:

-----BEGIN OPENSSH PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

我试过了ssh-keygen -p -N "" -m pem -f /path/to/keyssh-keygen -f /path/to/key -m pem但它没有输出OPENSSH我期望的标题。

  1. 这可能吗?
  2. 如果可能,我可以使用什么来执行此转换以及潜在的命令是什么?
  3. 如果我转换了密钥,我需要做任何事情来转换证书吗?
  4. 如果我确实需要转换证书,那么命令是什么?
  5. 如果对从 RSA 转换为 OPENSSH 的内容有任何进一步的解释,我将不胜感激。

macos ssh bash openssh rsa

2
推荐指数
1
解决办法
1654
查看次数

SSH无法记住密码

我正在使用PHPStorm,并且每隔几分钟就会在我正在处理的项目上弹出一个"OpenSSH"对话框.它似乎试图从远程Mercurial存储库中获取状态.如何配置OpenSSH以记住我的密码?

mercurial openssh phpstorm

1
推荐指数
1
解决办法
430
查看次数

使用公钥和私钥进行SSH通信

我试图了解SSH授权方法是如何工作的,因为我正在尝试使用gitolite设置git服务器.

据我所知,gitolite将使用ssh授权用户并将其访问权限授予具有个人写入和读取权限的特定存储库.但我对授权如何运作感到困惑.

我在YouTube上观看了一些视频,他们使用一些颜色类比来解释.如果我理解正确,对于两个以秘密方式相互通信的人,他们需要一个秘密和公钥.

这两个人彼此了解公钥,并且彼此之间进行通信他们同意使用一个公钥.为了建立连接,他们使用相同的公钥加密它们的私钥,并将结果发送给彼此.当他们收到结果时,他们会将私钥添加到该消息中,就像魔术一样,他们会得到相同的消息.

但我不认为我理解这是正确的,因为我无法看到服务器将如何验证客户端.我知道服务器必须从连接到他的客户端持有公钥,但他还有一个私钥?

当客户端尝试连接到服务器时,他发送用他的公钥加密的私钥,服务器使用客户端公钥加密他的私钥并发送给客户端?

服务器如何检查用户是否真的是他?我还读到,为了解密用公钥加密的信息,只有持有私钥的人才能解密该消息.那么如果客户端没有客户端私钥,服务器如何解密客户端发送的消息呢?

如果有人能够解释我如何使用这个公钥和私钥进行身份验证,授权和信息交换,我会非常高兴.

unix security ssh openssh public-key-encryption

1
推荐指数
1
解决办法
1026
查看次数

openssh-server无法在Docker容器中启动

我有一个奇怪的问题.

我无法ssh到具有IP地址的docker容器172.17.0.61.

我收到以下错误:

$ ssh 172.17.0.61
ssh: connect to host 172.17.0.61 port 22: Connection refused
Run Code Online (Sandbox Code Playgroud)

Dockerfile确实包含openssh-server安装步骤:

RUN apt-get -y install curl runit openssh-server
Run Code Online (Sandbox Code Playgroud)

并且步骤开始ssh:

RUN service ssh start
Run Code Online (Sandbox Code Playgroud)

可能是什么问题?

当我进入容器使用nsenter并启动ssh服务然后我能够ssh.但是创建容器ssh-server似乎并没有开始.

我该怎么办?

openssh docker dockerfile

1
推荐指数
1
解决办法
4112
查看次数

Perl:实现套接字编程( system() 从不返回)

我的目标:实现套接字编程,如果服务器未安装在远程机器上,客户端会尝试连接到服务器,客户端(主机)将 tar 文件传输到服务器(目标)机器和 perl 脚本。这个 perl 脚本解压文件夹并运行一个脚本(服务器 perl 脚本),现在的问题是:这个服务器脚本必须永远运行(多个客户端),直到机器重新启动或发生一些不愉快的事情。所以脚本运行正常:但是由于它一直在运行,因此控件不会返回到客户端,客户端将再次尝试连接到服务器(在某个预定义的套接字上),所以基本上我希望以某种方式运行服务器但带回控制到我的主机,在这种情况下是客户端。

这是代码:

my $sourcedir = "$homedir/host_client/test.tar";
my $sourcedir2 = "$homedir/host_client/sabkuch.pl";
my $remote_path = "/local/home/hanmaghu";

# Main subroutines
my $ssh = Net::OpenSSH->new ( $hostmachine, user =>$username, password => $password);
$ssh->scp_put($sourcedir,$sourcedir2,$remote_path)
     or die "scp failed \n" . $ssh->error;
# test() is similar to system() in perl openssh package
my $rc = $ssh->test('perl sabkuch.pl'); 
# check if test function returned or not -> this is never executed
if ($rc == 1) {
    print "test was …
Run Code Online (Sandbox Code Playgroud)

sockets perl fork openssh system

1
推荐指数
1
解决办法
218
查看次数

使用 SSH 密钥登录不适用于 Git Bash,但适用于 Windows 命令提示符

我正在按照本教程设置我的第一个 DigitalOcean droplet,并且我刚刚生成了一个用于公钥身份验证的密钥对。使用ssh-copy-id(来自 Git Bash,因为命令在命令提示符中不可用)将密钥添加到我的 Droplet 后,我​​可以从命令提示符很好地通过 SSH 进入我的 Droplet。

但是,当我尝试从 Git Bash SSH 时,它仍然提示我输入密码!我已经检查过,SSH 密钥存在于我的 Droplet 和我的计算机上。有什么问题?

ssh bash openssh git-bash digital-ocean

1
推荐指数
1
解决办法
8540
查看次数