SSH文件传输

发布于:2024-05-07 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、设置SSH密钥对,实现记住密码

要避免每次使用scpssh时都输入密码,你可以设置SSH密钥对(一对公钥和私钥),并将公钥添加到远程服务器上。这样,你的系统可以通过密钥自动验证身份,而无需手动输入密码。以下是设置SSH密钥对并配置免密码登录的步骤:

1. 在本地计算机上生成SSH密钥对

如果你还没有SSH密钥对,可以在你的本地机器上生成一个。在Git Bash中运行以下命令:

ssh-keygen -t rsa -b 4096
  • -t rsa: 指定密钥类型为RSA。
  • -b 4096: 指定密钥的位数,4096位提供较强的安全性。

按提示操作,你可以设置一个密钥的密码(可选,为密钥增加一层保护),并确认密钥存储的位置(通常是~/.ssh/id_rsa)。

注意提示会是要求你指定存储SSH密钥对的位置和文件名。如果你接受默认的位置和文件名(/c/Users/和谐号/.ssh/id_rsa),你可以直接按回车键继续。这将会在默认路径下创建私钥(id_rsa)和公钥(id_rsa.pub)文件。

如果你想要指定不同的路径或文件名,可以在这里输入你选择的完整路径和文件名。如果不确定,通常推荐使用默认设置。

接下来,系统可能会询问你是否要为密钥设置一个密码(passphrase)。设置密码可以增加一层安全性,即使你的私钥被盗用,没有密码也无法使用。然而,如果你的目的是实现免密码登录,你可以选择不设置密码(直接按回车键跳过)。

完成这些步骤后,你的SSH密钥对将被创建,然后你可以按前面的说明将公钥添加到远程服务器上。这样设置后,你应该能够在不需要输入密码的情况下通过SSH或SCP连接到服务器。

注意:输入密码时不显示字符——在大多数终端中,出于安全考虑,密码输入时不会显示任何字符,包括星号或点。你只需要正常输入密码然后按回车即可。

2. 将公钥上传到远程服务器

生成密钥后,你需要将公钥(默认为~/.ssh/id_rsa.pub)添加到远程服务器的~/.ssh/authorized_keys文件中。可以手动做,也可以使用ssh-copy-id工具来自动完成:

ssh-copy-id -i ~/.ssh/id_rsa.pub -p 20625 root@connect.westc.gpuhub.com
  • -i ~/.ssh/id_rsa.pub: 指定你的公钥文件。
  • -p 20625: 指定SSH端口。

如果你的系统不支持ssh-copy-id命令,可以手动将公钥内容添加到服务器的~/.ssh/authorized_keys文件中。

3. 测试SSH连接

设置完成后,尝试不带密码连接到服务器:

ssh -p 20625 root@connect.westc.gpuhub.com

如果一切设置正确,你应该能够不需要输入密码就可以登录到服务器。


 

二、文件传输

1.文件上传

root@autodl-container-5aa043a54e-f14d0c9a:~# scp -r -P 20625 C:/0B_workplace/program root@connect.westc.gpuhub.com:/root/autodl-tmp/program/ ssh: Could not resolve hostname c: Name or service not known

看来我们还是在遇到问题。很关键的一点是,你似乎在远程服务器的终端里尝试执行了scp命令,但你需要在你的本地机器上执行这个命令。当你处于远程服务器的shell(如提示符是root@autodl-container...)时,你无法访问你本地机器的文件系统。

为了正确执行这个操作,请确保你在本地的计算机上打开一个新的终端窗口(比如Git Bash或其他终端应用),然后在那里运行scp命令。以下是在你的本地Git Bash中执行的命令示例:

scp -r -P 20625 "C:/0B_workplace/program" root@connect.westc.gpuhub.com:/root/autodl-tmp/program/

请注意几点:

  • 使用双引号包围Windows的路径,尤其是当路径包含空格或特殊字符时。
  • 确保使用正斜杠(/)来表示路径,这是Unix系统和类Unix系统中的标准,包括在Git Bash中。
  • -P 20625 是指定SSH端口的参数,确保这个端口是正确的。

如果你仍然遇到问题,可以确认一下你正在哪个终端运行命令,以及该终端是否可以访问你想要上传的文件夹。如果需要进一步帮助,请随时联系我!