我是一名大学生,对 ssh 和 scp 还很陌生……对编程也是新手。我们最新的任务要求访问仅在大学学生服务器上的库。他们说在家工作要使用 SSH。
所以我已经完成了,我可以使用 ssh 登录到学生服务器,这样我就可以使用存储在那里的库进行编译(C++ 编程)
但是,我也不确定该怎么做:
- 在学生登录终端上编译本地计算机上的文件。或
- 使用 scp 将我正在处理的文件复制到我的 @student 文件夹,以便我可以在登录时进行编译。
关于b)我尝试了以下命令:
scp mike@ubuntu: /a1644923/testscp [email protected]: a1644923
但后来我得到:
ssh: connect to host ubuntu port 22: Connection refused
cp: cannot stat `/a1644923/testscp': No such file or directory
[email protected]'s password:
答案1
明智的做法是将文件从家用计算机复制到学生服务器。(您在第二步中尝试过的方法)
scp
需要两个参数:来源和目的地,只有远程部分需要username@hostname
。
因此,您的命令(针对一个文件进行测试)应为:
scp a1644923/testscp [email protected]:
末尾的冒号很重要。确保命令中没有多余的空格。我假设目录a1644923
位于您当前的目录中。您可以将该命令复制/粘贴到您的 shell 中。
如果您需要传输完整的目录,则必须启用递归模式。我假设您project1
当前目录中有一个目录。因此,请输入
scp -r project1/ [email protected]:
scp
注意和之间的空白-r
。命令是scp
,-r
是一个参数,指示scp
以递归方式工作,即复制下面的所有内容。
答案2
你好 Mike,请这样做:
sudo apt-get install sshfs
sshfs username@server:/home/UsersHomeFolderAtServer mnt/
在您的本地主目录中创建文件夹 mnt,然后将您的主文件夹从服务器安装到本地计算机。然后您可以在本地处理文件,但当您进行更改时,它们会上传到服务器。
我建议在服务器上编译文件,因为它安装的库/包版本可能与您在本地机器上安装的版本不同。
答案3
该错误告诉您它无法在您指定的位置找到文件(stat 是一个用于测试文件是否存在的函数)。
假设文件位于/a1644923/testscp
远程计算机上的目录中,您的问题似乎是冒号后面的空格;它们不应该在那里。通常,如果文件名中有空格,则需要使用 , 对其进行转义'\ '
或使用引号。否则,它将被解释为单独的参数。
scp 实际上并不比 cp 复杂,只是它从一台机器复制到另一台机器。但它的语法非常相似,只是文件规范格式需要为机器添加额外的说明符(如果机器与您的机器不同的话)(您不需要指定自己的机器)。
编辑:
从您所说的库位于远程计算机上的情况来看,您似乎想在远程计算机上编译源文件以使用这些库。在我看来,一切都应该在远程计算机上完成,因此您的本地计算机基本上只是一个远程终端。
当我处于类似情况时,我使用与本地相同的远程工具(用于编辑的 gvim 和其他标准 Linux 工具)。因此,远程工作与本地工作大致相同,并且不会出现记得复制已更改的文件或意外用旧文件覆盖新文件的问题。