把scp的标准输出和标准错误都重定向到一个文件,为什么shell界面还能打出"Enter windows password:"的字符串呢?
scp fromfilename username@x.x.x.x:/topath/tofilename 2>&1 > /tmp/tmp.txt
Enter windows password:
查了openssh的代码,答案很明显了。
char *
readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
{
ssize_t nr;
int input, output, save_errno;
char ch, *p, *end;
struct termios term, oterm;
struct sigaction sa, savealrm, saveint, savehup, savequit, saveterm;
struct sigaction savetstp, savettin, savettou, savepipe;
/* I suppose we could alloc on demand in this case (XXX). */
if (bufsiz == 0) {
errno = EINVAL;
return(NULL);
}
restart:
signo = 0;
/*
* Read and write to /dev/tty if available. If not, read from
* stdin and write to stderr unless a tty is required.
*/
if ((flags & RPP_STDIN) ||
(input = output = open(_PATH_TTY, O_RDWR)) == -1) {
if (flags & RPP_REQUIRE_TTY) {
errno = ENOTTY;
return(NULL);
}
input = STDIN_FILENO;
output = STDERR_FILENO;
}
/*
* Catch signals that would otherwise cause the user to end
* up with echo turned off in the shell. Don't worry about
* things like SIGXCPU and SIGVTALRM for now.
*/
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0; /* don't restart system calls */
sa.sa_handler = handler;
(void)sigaction(SIGALRM, &sa, &savealrm);
(void)sigaction(SIGHUP, &sa, &savehup);
(void)sigaction(SIGINT, &sa, &saveint);
(void)sigaction(SIGPIPE, &sa, &savepipe);
(void)sigaction(SIGQUIT, &sa, &savequit);
(void)sigaction(SIGTERM, &sa, &saveterm);
(void)sigaction(SIGTSTP, &sa, &savetstp);
(void)sigaction(SIGTTIN, &sa, &savettin);
(void)sigaction(SIGTTOU, &sa, &savettou);
/* Turn off echo if possible. */
if (input != STDIN_FILENO && tcgetattr(input, &oterm) == 0) {
memcpy(&term, &oterm, sizeof(term));
if (!(flags & RPP_ECHO_ON))
term.c_lflag &= ~(ECHO | ECHONL);
#ifdef VSTATUS
if (term.c_cc[VSTATUS] != _POSIX_VDISABLE)
term.c_cc[VSTATUS] = _POSIX_VDISABLE;
#endif
(void)tcsetattr(input, _T_FLUSH, &term);
} else {
memset(&term, 0, sizeof(term));
term.c_lflag |= ECHO;
memset(&oterm, 0, sizeof(oterm));
oterm.c_lflag |= ECHO;
}
if (!(flags & RPP_STDIN))
(void)write(output, prompt, strlen(prompt));
end = buf + bufsiz - 1;
for (p = buf; (nr = read(input, &ch, 1)) == 1 && ch != '\n' && ch != '\r';) {
if (p < end) {
if ((flags & RPP_SEVENBIT))
ch &= 0x7f;
if (isalpha(ch)) {
if ((flags & RPP_FORCELOWER))
ch = tolower(ch);
if ((flags & RPP_FORCEUPPER))
ch = toupper(ch);
}
*p++ = ch;
}
}
scp会运行一个ssh子进程来完成连接鉴权.
13996 root 0:00 /usr/local/bin/ssh -x -oForwardAgent no -oPermitLocalCommand no -oClearAllForwardings yes -lusername x.x.x.x scp -t /topath/tofilename
root@444444[]:/proc/13996/fd> ls -lrt
total 0
lrwx------ 1 root root 64 Jan 4 04:12 9 -> /tmp/lock/lock9997
lrwx------ 1 root root 64 Jan 4 04:12 6 -> /dev/tty
lrwx------ 1 root root 64 Jan 4 04:12 5 -> socket:[158339]
lrwx------ 1 root root 64 Jan 4 04:12 4 -> socket:[158338]
lrwx------ 1 root root 64 Jan 4 04:12 3 -> socket:[160359]
lrwx------ 1 root root 64 Jan 4 04:12 2 -> /dev/pts/0
l-wx------ 1 root root 64 Jan 4 04:12 1 -> pipe:[160353]
lr-x------ 1 root root 64 Jan 4 04:12 0 -> pipe:[160352]
从此可知,ssh就是通过file descriptor 6直接写/dev/tty来把prompt显示到shell界面的,和标准输出1/标准错误2没有任何关系。
lrwx------ 1 root root 64 Jan 4 04:12 6 -> /dev/tty
分享到:
相关推荐
SCP,全称为Security Channel Protocol,安全通道协议,是GP标准中用于保护卡片管理和服务提供过程的核心部分。 SCP03是GP2.2SCP03协议的一个具体实现,它在GP2.2的基础之上增加了更高级别的安全特性。SCP03引入了...
SCP是基于SSH协议的安全文件传输工具,通常用于在不同的主机之间复制文件。在自动化任务或脚本中,避免手动输入密码是非常重要的,因为这可以提高效率并减少人为错误。 **步骤1:生成RSA密钥对** 生成RSA密钥对是...
使用 Pexpect 可以自动为每台设备生成密钥对,并汇总到程序分发设备上。Pexpect 可以在 http://pexpect.sourceforge.net/ 下載到。 总结 使用 ssh 和 scp 不需要密码可以提高工作效率和工作质量。生成密钥对并将...
Linux系统中,scp和sftp命令是两种常用的远程文件传输命令,但是它们也存在一些风险,例如可能会让我们的电脑受到攻击,因此在不需要远程传输文件的时候,我们可以将它们关闭。那么如何禁止scp和sftp命令呢?下面...
pscp.exe windows下的scp命令,Windows与Linux之间传输文件的工具。 PSCP (PuTTY Secure Copy client)是PuTTY 提供的文件传输工具,通过SSH连接,在两台机器之间安全的传输文件,可以用于任何SSH(包括SSH v1、SSH ...
- **scp boot**:SCP的启动涉及到ARM Trusted Firmware,它为SCP提供了安全的引导环境。然后,SCP固件按照预定流程启动,执行必要的硬件初始化和系统配置。 - **ARM Trusted Firmware**:这是ARM提供的可信软件栈...
Fugo是一款专为Mac设计的scp工具,它简化了在本地和远程服务器之间拷贝文件和目录的过程。传统的scp命令虽然功能强大,但对于不熟悉命令行操作的用户来说,使用起来可能较为复杂。Fugo则通过直观的拖放界面和简单的...
《SCP03中文版》是GlobalPlatform组织发布的安全通道协议(Secure Channel Protocol)版本之一,具体名称为《GlobalPlatform卡技术安全通道协议‘03’卡片规范v2.2 – 修订案D 版本1.1.1》。该文档于2014年7月公开...
前言 scp是 secure copy的缩写, scp是Linux系统下...-B: 使用批处理模式(传输过程中不询问传输口令或短语) -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能) -p:保留原文件的修改时间,访问时间和访问权限
综上所述,"SolarWinds-SFTP-SCP-Server.zip"是一个集成SCP和SFTP服务的软件,专为Windows用户设计。通过简单的安装和配置步骤,用户可以快速建立一个安全的文件传输环境,实现本地和远程系统的文件交互。其核心功能...
"Worklist SCP测试工具"是一个专为测试DICOM Worklist SCP服务端设计的应用。工作列表(Worklist)是DICOM服务之一,它允许医疗机构管理患者预约、检查计划和结果等信息。通过这个测试工具,开发者或系统管理员可以...
SCP03使用特定密钥加密数据,这些密钥在安全域中管理,安全域可以理解为卡片上相对独立的安全存储空间。 AES(高级加密标准)是一种对称加密算法,被广泛用于各种软件和硬件中保护电子数据。SCP03协议就是采用AES...
SCP-CB全文件的压缩包包含了SCP基金会游戏的相关资源,SCP是"Secure, Contain, Protect"(收容、控制、保护)的缩写,这是一个流行的文化现象,源自于一个在线协作写作项目,后来发展成为一系列游戏、小说和其他媒体...
由于Vs2008不支持NuGet包管理器,你可以直接从GitHub上下载源代码并添加为项目的引用,或者手动下载编译好的DLL文件并将其添加到项目中。 ### 实现SCP下载 在C#中使用Renci.SshNet进行SCP下载的步骤大致如下: 1....
这是一个开源的.NET库,它为C#程序员提供了SSH协议的支持,包括SCP和SFTP服务。通过这个库,我们可以方便地创建SCP客户端,连接到支持SSH的远程服务器,进行文件的复制操作。 在C#中实现SCP文件下载,主要涉及以下...
在Linux中,`scp`命令本身并不直接支持并发复制,但我们可以借助其他工具来实现这一功能。例如,可以使用`parallel`命令配合`scp`实现文件的并发传输。假设我们有一个包含多个文件名的文件`files.txt`,每个行代表一...
同时,注意在生产环境中,为提高安全性,不应禁用`StrictHostKeyChecking`,而应正确配置主机密钥,以防止中间人攻击。 总之,Java中实现SCP功能主要依赖于JSch库,通过建立SSH连接,执行SCP命令,以及处理异常和...
在多机传输的场景下,目标部分会被替换为循环中的每台主机。 4. **权限与身份验证**:由于scp命令基于SSH,因此需要确保在所有目标主机上都有正确的公钥认证设置,以避免每次传输时输入密码。 5. **错误处理**:在...