小编krb*_*686的帖子

是否可以从本地运行的脚本内部通过 ssh 将 HEREDOC 发送到远程主机?

我本质上想在机器 A 上运行一个脚本,该脚本将通过 SSH 连接到机器 B,在 B 上执行命令,并将输出返回到机器 A。

所以我正在创建一个 csh 脚本来做到这一点,如果可能的话。

例如,此答案中的此解决方案适用于命令行:

ssh user@host << 'ENDSSH'
ls -l
ENDSSH
Run Code Online (Sandbox Code Playgroud)

我可以验证它是在远程而不是本地运行 ls。

但是,我希望能够在本地运行的 csh 脚本中的反引号内执行此操作。那可能吗?

我知道可以通过 SSH 连接并运行远程脚本,但这不是我的情况。

我还听说可以通过 SSH 发送本地存储的第二个脚本(我也没有弄清楚),但我喜欢将所有命令都包含在原始脚本中的想法,因此是 HEREDOC。

我知道这是一个非常特别的问题,但如果有办法,知道如何做会很酷。

行不通的事情

1)

`ssh user@host<<'ENDSSH'`
`echo "ls -l"`
`echo "ENDSSH"`
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

stty: standard input: Invalid argument. stty: standard input: Invalid argument. Warning: Command not found

然后它在ls -l本地运行,然后它尝试在ENDSSH本地运行,当然由于找不到命令而失败。

2)

`ssh user@host<<'ENDSSH'`
echo "ls -l"
echo "ENDSSH"
Run Code Online (Sandbox Code Playgroud)

与上面相同的问题,除了它只显示ls -lENDSSH作为文本。有道理……因为 HEREDOC …

ssh io-redirection csh

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

符号链接支持 Windows/CIFS 服务器和 linux 客户端

我有一个 Win10 文件服务器,它通过网络共享托管内容,例如代码存储库。

我在 Linux 上进行所有编码和开发,主要是 CentOS 或 Lubuntu,所以我遇到了非常有用的:

mount -t cifs....允许我轻松安装 Windows 共享的命令。但是我遇到的问题是尝试从共享安装中的来宾创建符号链接。具体来说,诸如此类的事情会automake --add-missing失败,因为它试图创建指向诸如此类install-sh文件和其他文件的符号链接。

我知道由于 Linux 和 Windows 之间的差异而存在复杂性,但我不确定是否存在可以在服务器上启用的选项,可能还有客户端,以允许这样做。

我读过一些书,但网上的其他答案对我来说似乎不太清楚。例如这篇文章:符号链接权限被拒绝,通过 cifs 共享文件夹,-似乎表明使用该sfu (Services For Unix)选项应该是可能的。它表示 cifs 内核模块必须至少是1.4.

2.03我的 CentOS 7.1 机器上有版本,并尝试过:sudo mount -t cifs -o username=,password=,sfu //Remote_Server/Share /Share没有成功。我还打开了 Windows 中的权限,secpol以允许我的 Windows 用户帐户创建符号链接。(我不确定这是否可能是一个因素,以防万一该实现试图在双方创建符号链接并且由于我的 Windows 帐户权限而无法创建)。我可以在 windows cmd 提示符下使用该mklink命令以管理员身份运行,但是当尝试在 linux 来宾上创建标准符号链接时,这仍然会导致failed to create symbolic link:........Operation not supported

那么有什么方法可以让 CIFS 和我当前的解决方案简单地使用它?或者是否有任何解决方案可以以某种方式抽象出 Linux 和 …

filesystems cifs

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

需要通过bash中的函数引用来捕获stdout并修改变量

我可以轻松地从函数调用(在子shell中)捕获标准输出到变量:

val="$(get_value)"
Run Code Online (Sandbox Code Playgroud)

我还可以通过引用修改 shell 中变量(例如,数组),可以在同一个 shell 中使用以下内容进行修改:

function array.delete_by_index {
    local array_name="$1"
    local key="$2"

    unset "$array_name[$key]"
    eval "$array_name=(\"\${$array_name[@]}\")"
}

array.delete_by_index "array1" 0
Run Code Online (Sandbox Code Playgroud)

但是我正在努力弄清楚如何做,以干净的方式同时进行。我想要的一个例子是从数组中弹出一个值:

function array.pop {
    local array_name="$1"

    local last_index=$(( $(eval "echo \${#$array_name[@]}") - 1 ))
    local tmp="$array_name[\"$last_index\"]"
    echo "${!tmp}"

    # Changes "$array_name" here, but not in caller since this is a sub shell
    array.delete_by_index "$array_name" $last_index
}

val="$(array.pop "array1")"
Run Code Online (Sandbox Code Playgroud)

在我看来,将标准输出捕获到变量的所有形式都需要 bash 中的子 shell,而使用子 shell 将不允许我在调用者的上下文中通过引用更改值。

我想知道是否有人知道一种神奇的 bashism 来实现这一目标?我并不特别想要在文件系统上使用任何类型的文件/fifo 的解决方案。

这个问题的第二个答案似乎表明这在kshusing 中是可能的val="${ …

bash

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

/etc/shadow 中的盐/哈希值相同

在 /etc/shadow 中,我可以看到几个具有完全相同的盐和哈希值(以及密码)的用户。

系统怎么会变成这样?这是否意味着密码不是通过生成的passwd(认为​​ passwd 随机化了盐)?这特别糟糕吗?

linux security password

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

标签 统计

bash ×1

cifs ×1

csh ×1

filesystems ×1

io-redirection ×1

linux ×1

password ×1

security ×1

ssh ×1