标签: shell

SSH - 运行一个命令,然后给我一个 shell

这个问题让我想起了我自己的一个问题。我想为机器创建一个别名ssh,运行一个命令(在这种情况下,cd到一个提供的路径),然后给我一个 shell。我已经运行了一百个变体:

$ ssh user@machine 'cd /some/path/ && bash -i -l'
Run Code Online (Sandbox Code Playgroud)

这是我能做的最好的事情。它在正确的目录中给了我一个 bash 提示,但没有作业控制,也不能使用箭头键(和其他一些快捷方式)。是否有捷径可寻?

我不能在 bashrc 或配置文件的末尾轻松地做到这一点,因为我想去的路径会有所不同(我会将它作为参数传递给别名),有时,我什至会 ssh 到那台机器根本不想去任何奇怪的地方 - 主目录很好。

ssh shell bash

4
推荐指数
1
解决办法
482
查看次数

服务器 Bash 行在文本和错误的地方换行

这是一个很难解释的问题,当使用 bash shell 连接到我的一台服务器时,在任何用户下,换行符都被破坏并且有各种各样的问题。其中一次我在下面的屏幕截图中详细说明:在此处输入图片说明

第2部分

第三部分

第四部分

我遇到的其他问题包括 nano 对我所在的行和/或字母感到非常困惑,如在 nano 中键入相同的消息所示:

纳米坏了

这些问题仅在我之前提到的连接到运行 CentOs 的服务器时才会出现。你知道为什么会发生这种情况以及我能做些什么来解决它吗?在其他服务器上,消息工作正常!

其他服务器工作

谢谢你的时间,


请求命令的输出:

无法正常工作的服务器: 不工作服务器

工作服务器:

工作的服务器


它可能是非工作服务器上的自定义提示吗?在 .bashrc 中

PS1='\e[1;32m\u@\h\e[m:\e[1;34m\w\e[m$ '
Run Code Online (Sandbox Code Playgroud)

对此进行评论似乎可以解决问题。

谷歌表示,如果不遵守这些规则,可能会出现换行错误

use the \[ escape to begin a sequence of non-printing characters,
and the \] escape to signal the end of such a sequence
Run Code Online (Sandbox Code Playgroud)

我不确定这适合我的提示吗?

shell bash terminal centos mac-osx

4
推荐指数
1
解决办法
2806
查看次数

防止“cd”记住遍历的符号链接

假设您有目录 ~/mytool 软链接到 /usr/local/mytool。然后cd mytool将当前目录保留为 ~/mytool,这可能会导致脚本行为不正确。有没有办法避免这种行为?

通过一些谷歌搜索,我发现您可以按如下方式实现:

cd $1 ; cd `pwd -P`
Run Code Online (Sandbox Code Playgroud)

没有切换到'cd'吗?环境变量?

shell bash directory symbolic-link

4
推荐指数
1
解决办法
688
查看次数

如何在不输入密码的情况下在另一个用户中运行 shell 脚本

我想在 hudson 中自动化一项工作,但 hudson 总是使用用户hudson来运行脚本。我想要的是以另一个用户身份运行脚本。

我查看了 ServerFault 的答案,但只找到了一个使用该su命令的解决方案,该命令要求我输入目标用户的密码。这不适用于自动脚本。

有人可以帮忙解决这个问题吗?谢谢。

linux shell

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

从没有 tty stdin 的根脚本中以另一个用户身份运行脚本

使用 CentOs,我想以用户“培训”的身份运行脚本作为系统服务。我使用 daemontools 来监控进程,它需要一个以 root 身份运行并且没有 tty 标准的启动程序脚本。

下面我给出了我的五种不同尝试,但都失败了。

  1. #!/bin/bash
    exec >> /var/log/training_service.log 2>&1
    setuidgid training training_command
    
    Run Code Online (Sandbox Code Playgroud)

    最后一行不够好,因为对于training_command,我们需要为trqaining 用户设置环境。

  2. su - training -c 'training_command' 
    
    Run Code Online (Sandbox Code Playgroud)

    这看起来像(以不同的用户身份运行 shell 脚本)但提供 ' standard in must be tty' as su 确保 tty 存在以可能接受密码。我知道我可以通过修改 /etc/sudoers(a la https://superuser.com/questions/119376/bash-su-script-giving-an-error-standard-in-must-be-a- tty)但我不情愿并且不确定后果。

  3. sudo -u training -i bash -c 'source $HOME/.bashrc; training_command'
    
    Run Code Online (Sandbox Code Playgroud)

    同一主题的变体:' sudo: sorry, you must have a tty to run sudo'

  4. runuser - training -c 'training_command'  
    
    Run Code Online (Sandbox Code Playgroud)

    这个给runuser: cannot set …

linux su shell centos daemontools

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

在所有文件夹上运行 chown 并将所有者设置为文件夹名称减去尾随 / 的脚本

一些麻木跑了chown -R username。在我们的网络服务器上的 /home 文件夹中,认为他在所需的文件夹中。毋庸置疑,服务器正在抛出很多问题。

我们有 200 多个网站,我不想将它们全部单独列出,因此我正在尝试制作一个脚本,将所有文件夹的所有者更改为文件夹名称,不带尾随 /。

到目前为止,这就是我所拥有的一切,一旦我可以删除 / 就可以了,但我还想检查文件是否包含 . 在其中,如果没有,则运行该命令,否则转到下一个。

#!/bin/bash
for f in *

do

    test=$f;
    #manipluate the test variable
    chown -R $test $f

done
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒!

提前致谢!

linux ssh shell bash

4
推荐指数
1
解决办法
9759
查看次数

是否可以将 shell 附加到现有的 ssh 隧道?

我有一些SSH tunnels自动连接/重新连接的设置Shimo

有没有办法将 shell 访问连接到那些现有的隧道,如果是这样怎么办?或者我是否必须为 shell 访问建立一个新的 ssh 连接?

ssh shell

4
推荐指数
1
解决办法
131
查看次数

如果我知道一个进程的 PID 号,我能知道它的名字吗?

如果我有PID一个进程的编号(在 UNIX 机器上),我如何知道其关联进程的名称?我需要做什么?

unix shell bash process pid

4
推荐指数
1
解决办法
6948
查看次数

是否有一种简化的方法可以从现有的 CentOS 5.10 服务器导出设置以进行本地 Vagrant 配置?(人偶、厨师、贝壳或其他)

我最近开始学习如何使用 Vagrant 来启动本地开发环境。(在对各种 WAMP 堆栈选项感到沮丧之后)到目前为止,Vagrant 很棒……学习曲线很小,但从长远来看看起来很有希望。

在尝试使我的 VM 看起来像我的在线服务器的乏味过程之后……在我看来,Vagrant 缺少了一个部分。现在的过程似乎或多或少像手动试错。第一次快速设置或轻松保持与上游服务器同步的理想选择。

诚然,我可能不确切知道我在寻找什么......因此问题。

是否有一种简化的方法可以从现有的 CentOS 5.10 服务器导出设置以进行本地 Vagrant 配置?(人偶、厨师、贝壳或其他)

这样的事情是我所设想的......

(连接到在线服务器...)

  1. 检测 repo 差异并根据需要启用、禁用、添加本地。
  2. 检测包,并同步本地匹配。(从本地安装或删除)
  3. 获取 httpd.conf,调整本地(如果需要)并同步。
  4. 获取 php.ini,调整本地(如果需要)并同步。
  5. 获取 MySQL 设置,调整本地(如果需要)并同步。
  6. 获取时区并同步。
  7. [您对应该同步的其他内容的建议在这里欢迎...]

理想情况下,这将在配置期间运行,并且基本上保持本地版本与在线版本同步。这将消除不断手动调整本地设置以保持同步的需要。如果某些内容在线更改(由主机或内部)......它会自动传播。(当然,理想情况下,您可以标记设置以根据您的需要调整行为)

或者,我想如果我可以在不打包各种用户特定数据的情况下打包在线服务器,那也可以。但是,据我所知,这似乎不太可能……而且效率肯定不会很高。

警告

就我个人而言,我使用的是带有 cPanel 的 CentOS 5.10 服务器。cPanel 似乎在服务器端做了很多不一定立即显而易见的事情。一个例子是许多包名称以 cPanel 开头,看起来是专有的,但同时与我可能想要同步的内容相关。(例如cpanel-php53)据我目前所知,这些不能轻易同步......因此需要采取变通办法。另一个例子可能与预期的路径不同,但我不太确定,因为我对 CentOS 和 cPanel 的默认安装不够熟悉,无法确定任何特性。

到目前为止我所做的...

在我决定询问是否有更好的方法可以与 Vagrant 更紧密地合作之前,我做了一些事情。这并不可怕,但并不真正“精简”或全面。以下是详细信息...

  1. 我学会了如何yum repolist all在两台机器上运行以及如何使用 来查看文件系统中的 repos cd /etc/yum.repos.d; ll;,但没有学习如何使用此信息自动同步 repos。

  2. 我写了一个 shell 脚本来让本地的包与远程的包非常接近。然而,虽然它做得很好,但它并不完美,我想知道是否有更好的方法。问题...

    • 我不确定是否允许删除本地独有的软件包。(另外,抛出一些错误)
    • 除了从安装列表中完全删除每个包之外,我还没有弄清楚如何补偿以“cpanel”为前缀的包,这些包似乎是我真正想要的(PHP、MySQL 等)的替代品。
    • 这不能作为 Vagrant 供应商运行,因为它本质上需要用户输入。同样,运行此程序并删除“本地独有”的软件包将消除先前在配置期间运行的 yum 安装。

 

#!/usr/bin/env bash

# This script …
Run Code Online (Sandbox Code Playgroud)

shell centos puppet chef vagrant

4
推荐指数
1
解决办法
222
查看次数

通过 SSH 访问本地控制台

我正在寻找一种通过 SSH 与本地控制台交互的方法 - 就像使用直接连接的键盘一样。

在我的特殊情况下,我有一个 debian 服务器(仅限控制台,没有 X 系统),它在 tty1 上显示几个文本值。这台计算机没有连接输入设备,只有一个显示器。配置是通过 ssh 完成的。在 SSH 中执行的命令应该显示在 tty1 上。

有没有办法以与 VNC 会话在 X-Window 系统上进行的方式相同的方式与 tty1 交互?

remote-access ssh shell vnc

4
推荐指数
1
解决办法
9808
查看次数