相关疑难解决方法(0)

如何使用SSH在远程计算机上运行shell脚本?

我必须在远程机器上运行shell脚本(windows/Linux).

我在机器A和B上配置了SSH.我的脚本在机器A上,它将在远程机器上运行我的一些代码,机器B.

本地和远程计算机可以是基于Windows或Unix的系统.

有没有办法使用plink/ssh运行?

sysadmin ssh shell remote-execution

1164
推荐指数
12
解决办法
120万
查看次数

什么是在Bash中ssh和运行多个命令最干净的方法?

我已经设置了ssh代理,我可以在Bash脚本中运行外部服务器上的命令,例如:

ssh blah_server "ls; pwd;"
Run Code Online (Sandbox Code Playgroud)

现在,我真正想做的是在外部服务器上运行很多长命令.将所有这些包含在引号之间会非常难看,而且我宁愿多次避免ssh'ing以避免这种情况.

那么,有没有一种方法可以用括号括起来的一个方法做到这一点?我正在寻找以下内容:

ssh blah_server (
   ls some_folder;
   ./someaction.sh;
   pwd;
)
Run Code Online (Sandbox Code Playgroud)

基本上,只要它干净,我会对任何解决方案感到满意.

编辑

为了澄清,我在谈论这是一个更大的bash脚本的一部分.其他人可能需要处理脚本,所以我想保持清洁.我不希望有一个bash脚本,其中一行看起来像:

ssh blah_server "ls some_folder; ./someaction.sh 'some params'; pwd; ./some_other_action 'other params';"
Run Code Online (Sandbox Code Playgroud)

因为它非常丑陋且难以阅读.

unix ssh bash

326
推荐指数
14
解决办法
35万
查看次数

"设备不合适的ioctl"

我有一个在AIX框中运行的Perl脚本.

该脚本尝试从某个目录打开一个文件,但由于该文件没有读取权限,因此无法读取该文件,但我得到了一个不同的错误inappropriate ioctl for device.

它不应该说类似的no read permissions for file东西吗?

这条inappropriate ioctl for device消息是什么意思?

我该如何解决?

编辑:这是我在做的时候发现的strace.

open("/local/logs/xxx/xxxxServer.log", O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE, 
    0666) = 4 _llseek(4, 0, [77146], SEEK_END) = 0
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbffc14f8) = -1 ENOTTY 
    (Inappropriate ioctl for  device)

perl ioctl

50
推荐指数
5
解决办法
19万
查看次数

使用ssh检查远程主机上是否存在文件

我想检查远程主机上是否存在某个文件.我试过这个:

$ if [ ssh user@localhost -p 19999 -e /home/user/Dropbox/path/Research_and_Development/Puffer_and_Traps/Repeaters_Network/UBC_LOGS/log1349544129.tar.bz2 ] then echo "okidoke"; else "not okay!" fi
-sh: syntax error: unexpected "else" (expecting "then") 
Run Code Online (Sandbox Code Playgroud)

linux ssh bash shell

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

终止由bash脚本执行的SSH会话

我有一个脚本,我可以在本地运行远程启动服务器:

#!/bin/bash
ssh user@host.com <<EOF
  nohup /path/to/run.sh &
EOF
echo 'done'
Run Code Online (Sandbox Code Playgroud)

运行nohup后,它会挂起.我必须按ctrl-c退出脚本.

我已经尝试在here doc的末尾添加一个显式退出,并为ssh使用"-t"参数.两者都不起作用.如何立即退出此脚本?

编辑:客户端是OSX 10.6,服务器是Ubuntu.

ssh bash

18
推荐指数
2
解决办法
4万
查看次数

bash脚本在ssh之后执行命令

我试图通过我的第一个脚本执行一些命令,但它不起作用.

#!/bin/bash

#connect to server
echo "Connecting to the server..."

ssh -t root@IP '

    #switch user to deploy
    su - deploy

    #switch path
    echo "Switching the path"
    cd /var/www/deploys/bin/app/config

    #run deploy script
    echo "Running deploy script"

    /usr/local/bin/cap -S env=prod deploy

    #restart apache
    sudo /bin/systemctl restart  httpd.service

    bash -l
'
Run Code Online (Sandbox Code Playgroud)

怎么了?我成功连接到服务器,用户被更改,然后我没有看到任何事情发生.当我按下ctrl + c就像在终端中那样,应该执行的命令的一些输出出现,但是有一些错误.

为什么我在启动脚本后看不到终端中发生的一切?我这样做是错误的吗?

顺便说一句:当我尝试手动连接并自己运行命令时,一切都运行良好.

使用CentOS 7.

ssh bash centos

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

如何解决Alpine Linux中"由于stdin不是终端而无法分配伪终端"的问题?

我正在编写一个运行各种shell命令的PHP程序.有时它需要调用su,并且按照设计,我希望它提示提升特权密码.passthru()在PHP中使用可以正常工作.

我选择了编写功能测试只针对我的程序,因为它依赖于ssh,su和其他shell命令.因此,我想在PHPUnit中运行真实的东西,看看它是否像我期望的那样工作.

由于这需要SSH服务器和用户帐户配置,我已将测试设置为在Docker中运行.这种方法看起来很好 - 图像构建,运行时调用PHPUnit,然后退出.我希望有一种方法可以通过Docker将结果返回给调用系统,例如Travis CI.

我已选择Alpine Linux作为我的基本Docker镜像,但我遇到终端分配问题.我原本以为PHPUnit正在阻碍(参见这个问题的原始版本)但我现在已经缩小到SSH,无论是由PHP运行,还是仅在控制台运行.

这很好用:

su -c whoami
Run Code Online (Sandbox Code Playgroud)

但是,这不是:

ssh localhost -t 'su -c whoami'
Run Code Online (Sandbox Code Playgroud)

我明白了:

su:必须suid才能正常工作
连接到localhost关闭.

请注意,ssh设置了对localhost的无密码访问(用于测试目的),因此我希望输入的唯一密码就是那个su.

ssh建议的手册-f有助于要求密码的位置(交换机"在命令执行之前请求ssh转到后台")所以我试试这个:

ssh localhost -t -f 'su -c whoami'
Run Code Online (Sandbox Code Playgroud)

我得到:

由于stdin不是终端,因此不会分配伪终端.
4275760bde94:〜$ su:必须是suid才能正常工作

啊,另一个错误!好的,所以我尝试了这些想法,特别是强迫终端:

ssh localhost -tt -f 'su -c whoami'
Run Code Online (Sandbox Code Playgroud)

双t仍然会出现关于SUID的投诉,但仍然无效.

但是,如果我在我的Ubuntu开发机上执行此操作(也配置了PPK访问自己),它可以正常工作:

$ ssh localhost -t 'su -c whoami'
Password: 
root
Connection to localhost closed.
Run Code Online (Sandbox Code Playgroud)

这使它看起来像Alpine或BusyBox的OpenSSH有问题.我该如何进一步深入研究?

一个解决方案只是交换到另一个基础发行版,Ubuntu肯定会工作正常,但这将大大增加我的Docker图像大小(目前总共68M非常好).所以,如果可以的话,我想坚持使用Alpine.

不太可能是Docker

我确实想知道Docker是否可能阻止创建或附加终端,但很快就打了折扣,因为我可以使用它来获得交互式shell docker …

shell terminal docker alpine-linux

5
推荐指数
0
解决办法
9986
查看次数

来自共享 Gitlab 运行程序的 SSH 停止工作

这以前确实有效!

我的管道中的部署步骤是通过 SSH 连接到 DO 框并从 Docker 注册表中提取代码。如前所述,这之前是有效的,这是我当时deploy的一步,从这里.gitlab-ci.yml得到了很好的灵感:Using SSH

deploy:
  stage: deploy
  image: docker:stable-dind
  only:
    - master
  services:
    # Specifying the DinD version here as the latest DinD version introduced a timeout bug
    # Highlighted here: https://forum.gitlab.com/t/gitlab-com-ci-stuck-on-docker-build/34401/2
    - docker:19.03.5-dind
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
  environment:
    name: production
  when: manual
  before_script:
    - mkdir -p ~/.ssh
    - echo "$DEPLOYMENT_SERVER_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - eval "$(ssh-agent -S)"
    - …
Run Code Online (Sandbox Code Playgroud)

ssh openssh gitlab gitlab-ci gitlab-ci-runner

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

如何通过SSH bash脚本在远程服务器上cd?

我有一个bash脚本,我用来通过ssh连接到远程服务器.这是有效的,但我希望脚本在连接后立即传递cd/some/dir的命令.这似乎不起作用.这是我的代码:

#!/bin/bash
echo "SSHing.."
ssh -i ~/.ssh/some-site.pem xxx@yyy.com
cd /some/dir        
read
Run Code Online (Sandbox Code Playgroud)

如何在建立SSH连接后立即执行cd命令?

unix linux ssh bash

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