你如何远程pipe理你的Linux机器?

注意:我今天早上提出了关于EC2盒子的这个问题,但是只有find工具来启动和停止实例的链接,所以我将重新说明…

我有几个Linux的盒子,为我的一个项目做夜间处理工作。 不时,我需要进入,修改一些代码,configuration一些东西,移动文件等等。

我的这些操作工具是痛苦的稀疏(SSH进入框,编辑VIM文件,WGET远程文件,我需要),我怀疑有一个更好的方法来做到这一点。 我很好奇听到我的位置上还有其他人在做什么。

你使用某种forms的窗口系统和远程桌面相当于访问该框,或者是所有的命令行吗? pipe理远程Windows盒子是微不足道的,因为您可以简单地远程桌面和通过networking传输文件。 在Linux世界中是否有与此相当的东西?

你正在做你的configuration文件更改/脚本直接在机器上调整? 或者你在本地机器上设置了什么东西来远程编辑这些文件? 还是你只是远程编辑它们,然后在每次保存时转移它们?

你如何在服务器和你的本地环境之间来回移动文件? FTP? 通过VPN的某种映射驱动器?

我真的需要得到一些pipe理这些箱子的最佳实践。 任何build议,以消除一些痛苦将是最受欢迎的!

我的这些操作工具是痛苦的稀疏(SSH进入框,编辑VIM文件,WGET远程文件,我需要),我怀疑有一个更好的方法来做到这一点。 我很好奇听到我的位置上还有其他人在做什么。

疏? 你什么意思? 请原谅我的咆哮,但是把ssh,vim和wget视为痛苦的几乎是侮辱性的。 从你的问题中我推断出你主要是白天工作的程序员,所以我有点理解这个问题。 但说实话,我不会雇用一个Linuxpipe理员,他对你所提到的三个工具都不熟悉。

你使用某种forms的窗口系统和远程桌面相当于访问该框,或者是所有的命令行吗? pipe理远程Windows盒子是微不足道的,因为您可以简单地远程桌面和通过networking传输文件。 在Linux世界中是否有与此相当的东西?

对于pipe理员任务,我永远不会使用X环境。 你不需要它,它只会占用系统资源,而且在大多数情况下,它们是一个障碍,而不是一个帮助。 大多数GUIconfiguration工具(几乎所有的,实际上)都只提供了configuration选项的一个子集,你可以在configuration文件中用vim设置。

pipe理一个Linux机箱不亚于pipe理一个Windows机箱。 获得一个体面的技能只需要一些时间。

和networking文件传输等效? 大量。 scp,sftp,ftp,nfs,cifs / smb(Windows文件共享协议),然后一些。

你正在做你的configuration文件更改/脚本直接在机器上调整? 或者你在本地机器上设置了什么东西来远程编辑这些文件? 还是你只是远程编辑它们,然后在每次保存时转移它们?

取决于我在做什么。 我直接在机器上的configuration文件(用于开发和testing框)中进行大部分工作,然后将文件推送到我们的Satellite服务器上的configuration通道中,之后我将文件直接部署到所有服务器上(对于生产箱)。 真的,vim是一个宝藏。 也就是说,当你发现如何正确使用它。

你如何在服务器和你的本地环境之间来回移动文件? FTP? 通过VPN的某种映射驱动器?

一路scp,也许有些sftp,我也build议你也这样做。 永远不要使用FTP通过公共networking移动敏感文件(例如configuration文件)。 我不使用映射networking,因为我只需要在服务器上。 如果你的意思是c文件,而不是configuration文件,我通常使用svn或git之类的东西,然后将更改推送到框中。

我真的需要得到一些pipe理这些箱子的最佳实践。 任何build议,以消除一些痛苦将是最受欢迎的!

您已经在使用它们:ssh,scp,wget和vim。 那些不是痛苦。 你可能会有一些牙痛的痛苦,但你知道他们有多强大。 但是,为了将Windows的比喻带回来,我必须使用Windows盒子才会感到严重受阻。 对你来说,这是相反的。 这正是你习惯的。 所以,给它一些时间,它会来到你身边。

你已经提到了ssh,vim和wget,它们是必不可less的,完美的。 一些额外的工具,可以使生活更轻松:

1. GNU屏幕/ byobu

“GNU Screen是一个免费的terminal多路复用器,它允许用户在单个terminal窗口或远程terminal会话中访问多个单独的terminal会话,这对于从命令行处理多个程序以及从启动的shell中分离程序该程序。” (来自wikipedia上的GNU_Screen页面)

一个主要的优点是你可以有一个或几个虚拟terminal,当你回来时(即通过ssh重新login),它们处于与你离开它们完全相同的状态。 当您的连接由于某种原因而中断时,这也很好。

屏幕独立于您使用的软件(它位于服务器上)连接的软件,因此它与腻子或大多数其他terminal软件很好地结合在一起。

本文展示了一些你可以用它做的很好的事情: http : //www.pastacode.de/extending-gnu-screen-adding-a-taskbar/en/

一个很好的select是byobu,它在一些发行版上很好地预先configuration好了: http : //byobu.co/


2.午夜指挥官

基于控制台的graphics浏览工具,用于查看和操作文件和目录。

也可以做安全的远程传输。 有一个内置的FISH和FTP客户端。

这意味着在命令行控制台中并排显示2个文本窗口,其中一个显示远程框,另一个显示远程框,另一个显示连接到的位置(也可以是本地系统)。然后,可以并排导航两个文件系统,标记或调查单个文件或文件树,还可以在不同位置之间复制或移动它们。 FISH是安全的,FTP不是。 非常强大和简单的初学者。


3. rsync

用于快速,安全和可靠的文件传输和不同位置之间的同步


4. VCS

使用像bazaar,mercurial或者git这样的分布式版本控制系统来更新代码。 Github或Bitbucket提供了纪念代码托pipe,但它不是必要的,你也可以在自己的机器上有效地使用它。

Joseph Kern:你能详细说明一下如何正确使用git来进行远程configuration吗?


5.terminal客户

在类Unix系统上,他们已经在Windows上,你可以使用Putty,Tera Term,Mind Term或者Pandora。 或者从cygwin terminel窗口到远程框(这有更多的优点,但这是一个你喜欢的问题)进行cygwin安装和ssh。


6.隧道和端口转发

将某些端口安全地转发到本地计算机会很有帮助。 例如,您可以转发mysql端口TCP 3306或postgres TCP 5432,并在本地安装一些数据库pipe理工具。

你可以使用putty(或者基于它的小兄弟plink的命令行)从Windwos机器上build立隧道,而cygwin和Mindterm也可以做端口转发。 如果你是在一个类似unix的机器上,你可以使用ssh odr plink创build这样的隧道。

为了给各个端口创build更稳定和永久的隧道,我推荐OpenVPN。 “预共享密钥”隧道方法从点到点安装并不困难。


7.有一个本地的类Unix系统

当你的本地计算机是Mac的时候,你已经可以打开一个本地shell。 当您的工作站是基于Windows的时候,创build一个本地的unix服务器可能会有帮助,这个服务器位于同一个本地networking中。 这可以是连接到相同路由器或交换机的不同房间中的不同机器。 或者,如果只需要一台机器,则可以安装免费的vmware服务器并创build虚拟机,最好是与远程机器相同的操作系统。 在其上安装一个samba服务器,你可以从你的桌面上“使用”samba共享。

如果你在本地服务器上安装了ssh服务器,并且在你的路由器上打开了端口22,那么你可以在外面的时候进入本地系统。

您可以build立到远程机器的隧道或使用rsync传输和同步文件和整个文件树。 您可以将其用于VSCtesting,作为本地Web服务器进行本地开发,用于培训目的。

您可以从远程计算机上获取备份。 您可以创build自动执行备份的本地cron作业(例如,要定期保存在本地的数据库)


8. X远程GUI

如果你在Linux上像在系统上一样工作,也可以在你的本地机器上的GUI服务器上运行GUI应用程序。 这可能是一个graphics文件比较工具或几乎任何你想要的。

虽然它不是很常见,在msot的情况下,没有必要使用gui软件进行linux系统pipe理,但是在某些情况下,如果可以的话,您可能会发现它很有用。

在远程机器上确保在/ etc / ssh / sshd_config这一行存在:

X11Forwarding Yes 

重新启动SSH服务器

 /etc/init.d/sshd restart 

然后下次login

 ssh -X me@remote-box 

您将拥有一个X隧道,尝试在远程服务器上安装xclock以进行testing,并在刚刚提到的ssh会话中执行xclock 。 testing目的的一个简单的x时钟应该出现在你的Linux GUI上。

如果您安装本地X环境,这也可能是Mac。


9.如果您有一堆类似的框或任务:使用系统configuration工具

如果您有一个服务器场,或者使用多台冗余或其他相同或类似的机器进行大型云部署,则可以使用此服务器场。

如果大多数盒子都是单独的,或者有不同的操作系统或不同的版本运行,那么这可能是没有意义的。

有几个工具:


10.使用docker部署应用程序容器

这甚至更进一步。 Docker是一个开源项目,可以在软件容器中自动部署应用程序: https : //www.docker.io


11.使用Google Compute Engine进行自动部署pipe理

https://cloud.google.com/products/compute-engine/

Google提供非常令人兴奋的可能性的Linux虚拟机。 您可以使用包括RESTful API,命令行界面和基于Web的控制台等工具快速部署大型虚拟机群集。 您还可以使用RightScale和Scalr等工具自动pipe理您的部署

如果你正在寻找一个很好的graphics用户界面来通过Windows操作系统通过SSH进行文件pipe理,请查看WinSCP: http : //winscp.net

我不pipe理任何EC2实例,但是一般情况下,如果我有不止一台机器执行angular色,我会尝试编写一个脚本来在所有类似的方框上执行工作,以代替对方框进行更改。

我想开始使用Puppet( http://reductivelabs.com/products/puppet/ ),因为它使得系统pipe理更像是configurationpipe理练习。 我还没有空闲的时间仔细看看,但是我听到了很好的话。

你需要考虑像Chef这样的系统configurationpipe理工具。

我很难通过SSH会话手动pipe理系统了。 我将所有Web应用程序和项目的代码保存在一个源代码库中,我可以从运行它们的系统访问这些源代码库,比如EC2上的网站。 在云中工作时,拥有自动化基础架构至关重要。

基本工作stream程如下所示。 首先,对于应用程序代码和configuration数据:

  • 从GitHub或其他版本控制库复制/签出代码。
  • 编辑我本地工作站/笔记本电脑上我最喜欢的编辑器中的代码
  • 提交更改,推送到中央存储库。

要进行configuration,请添加:

  • 将configuration文件安装在厨师可以为其服务的位置。
  • 在边缘节点上触发厨师 – 客户端运行,或者等待间隔。

系统像包安装,用户创build,从模板生成的configuration文件等configuration。

我[几乎]不会直接手动编辑远程系统上的configuration文件,应用程序数据或其他任何内容。 更改是通过我的本地存储库完成的,并推送给主。 我知道我的系统每次都会正确configuration,无论我是否需要杀死一个实例并重启它。

configuration所需的文件直接在Chef服务器上提供,Chef服务器只是一个web应用程序(merb,在Apache + Passenger中运行)。 客户访问通过openid授权进行控制。

我的configuration包括Nagios和Munin的钩子,所以我也可以监控和趋势,而不必手动做任何事情来设置。

最近的最佳实践倾向于自动configurationpipe理。 如果你还在手动做事情,你就太努力了。

ssh,vim和wget有什么问题? 在我看来,大多数Windows用户都不知道gem。 🙂

有时我通过FTP或SFTP远程使用gVim。

如果您更喜欢在Linux机器上使用GUI,则可以在本地主机上运行X服务器(参见Cygwin),然后通过ssh连接转发显示。

我从来没有考虑过一个VPN解决scheme值得花费或麻烦pipe理Linux。

如果您正在开发并需要在服务器上运行您的开发作业,只需在服务器上设置一个版本控制客户端,远程login,同步客户端并运行您的进程。

pipe理远程Windows盒子是微不足道的,因为您可以简单地远程桌面和通过networking传输文件。 在Linux世界中是否有与此相当的东西?

这是拖钓吗?

Windows盒子的远程pipe理不是微不足道的。 unix盒子的远程pipe理是因为它们被devise为远程pipe理并且在networking上。 对于windows而言,它是一个系统,而不是从头开始devise的networking。

这是一个轶事,但从各公司的经验来看,Linux机器的服务器到系统pipe理比例远远高于Windows。 只是因为Windows上的自动化不是微不足道的,gui总是比脚本慢。 话虽如此,有Windowspipe理员可以爱抚一个Windows基础设施,易于pipe理,但这些pipe理员是非常罕见的。

您需要的所有工具在每个Linux发行版中都是默认可用的。 如果你想要一个graphics化的login,那就这样做吧,它只会浪费CPU和内存,并且会给你和windows一样的问题。 正如已经说过的,对于不止一个箱子,你应该考虑木偶,厨师,cfengine或其他许多工具。

你说你正在使用SSH来pipe理“几个”框。 我强烈build议ClusterSSH一次写入相同的命令(假设他们有类似的目的)。

http://www.linux.com/learn/tutorials/413853:managing-multiple-linux-servers-with-clusterssh

用法与“cssh -l username clustername”一样简单,它将打开许多一次性或单独pipe理的uxterm窗口。 集群由configuration文件中的IP列表定义。 据我所知,唯一缺less的是X支持。

编辑:我已经迁移到终结者作为多terminal布局可以很容易地保存和恢复,如果需要,你会得到10个同步X隧道。 使同时configuration服务器和客户端计算机变得简单。

此外,Fabric在我的客户端进行软件更新时非常方便,基本上取代了所有zip / scp / unzip / cp的东西。

我用:

  • SSH – 用于访问
  • SCP – 复制文件
  • SSHFS – 如果我需要挂载一个驱动器或目录
  • git – 保存configuration

把我的configuration放在版本控制下,可能是我做的最聪明的事情。 我尽可能经常使用基于SSH的工具来减lesspipe理占用空间和攻击面。

目前我所有的git仓库都是本地的。 将来我会把configuration移动到远程回购。

不要忘记使用Webmin ,这是一个基于Web的Unix / Linux系统pipe理界面。

SSH对我来说一直是足够的。 还有其他的selectX11本质上是远程桌面,虽然它本身是不安全的,因为它本身没有encryption。 但是,它可以通过SSH连接隧道(你不必打开额外的端口的好处)。 这当然假定您在服务器上安装了X环境。

SFTP(这是通过SSH的FTP,所以再次没有额外的端口需要打开)可以用来放在服务器上的文件,而不是拉他们一个很好的Windows SFTP客户端可以在http://filezilla-project.org/find

我ssh到盒子,改变命令行和编辑如vi / nano时,改变是简单的。 对于更复杂的文件更改,如同时编辑多个源代码,我使用Mac OS X上的BBEdit。它可以使用SCP访问文件系统。 我确定有这样的Windows和Linux编辑器。 sshfs是一种使用ssh远程访问文件系统的方法。

肯定腻子; 以及ssh客户端,还有一个基于Windows的SCP客户端。

用于Linux的ssh命令行(因为它们甚至没有安装X11)以及我的苹果机器上的ssh和ARD混合。

请注意,我从来没有使用苹果远程桌面来传输文件,因为在TCP AFP是荒谬的慢 ; 我只是使用scp

如果你想远程graphics访问,你几乎肯定会想要设置VNC。

如果你想通过SSH远程编辑你的文件,你有一些select:

  • 如果您使用KDE工具(Kate,KDevelop),请使用fish协议。
  • 将FUSE设置为(自动)安装您的远程卷。
  • 使用muCommander (一个跨平台,graphicsmc )来回移动你的文件
  • 一些文本编辑器(例如Mac上的TextWrangler)支持通过ssh获取文件并来回移动文件

编辑完文件后,只需使用SSH即​​可开始编译。

还有一件事要考虑的是使用版本控制系统。 bzr真的很好, 它很容易设置,并devise为易于使用。 您可以在一台计算机上工作,推送更新,在您的服务器上执行更新,执行命令,并在出现错误时恢复。

SSH大部分时间都在做这项工作。 学习可用的命令行工具是值得的。 如果有我想使用的GUI工具,我只使用VNC 。

为了移动文件,我通常将CFIS / SAMBA共享挂载到本地机器上。

对于简单的修改,SSH和SCP就是这样做的。 如果需要在大量机器上进行更改,则应该查看configurationpipe理系统。 它将能够启动/停止服务,更改configuration文件的内容,并validation您的系统处于已知状态。

我更喜欢使用Bcfg2,但是Puppet和CFEngine也很受欢迎。

我在所有的服务器上每小时运行一次Bcfg2,尽pipe它也可以手动运行。 有一个中央版本控制的所有系统configuration文件的存储库,所以我们可以跟踪所做的任何修改。 该系统工作得非常好,是从手动login到服务器和调整东西的一大步。

我经常通过SFTP链接使用Komodo 。

pipe理Windows系统一直是“沉重的”,也就是说,一个完整的窗口环境是必要的,这就要求在现场或像远程桌面或VNC这样的networking繁重的应用程序。

UNIX的devise考虑到了networking – 所以这些工具是为了在networking上工作而devise的,而不是为了美观。 一个UNIX服务器不应该有这个窗口环境(通常是X11)设置。

SSH,wget和vim的极简主义界面更有利于networking – vi实际上是devise用于300baud调制解调器线路。

实际上,graphics工具可以帮助您使用远程UNIX和Linux系统(wsp是一个; gvim可能是另一个)。

pipe理UNIX系统的常用方法是login到机器上并在机器上工作。 不需要移动文件来编辑它们。 唯一必须记住的是确保configuration良好,并在可能的情况下进行testing。

SSH来访问,如果我需要传输有限的文件,scp。 如果我们真的需要它,通过SMBFS / SAMBA共享目录。 通常这是浪费时间。 我们一些less数* nix能干的员工使用webminlocking到通过HTTPS的本地子网访问。

Shellinabox

Shell In Box (发音为shellinabox)是由Markus Gutschke创build的基于Web的terminal模拟器。 它具有内置的Web服务器,在指定的端口上作为基于Web的SSH客户端运行,并提示您使用Webterminal仿真程序,以使用任何支持AJAX / JavaScript和CSS的浏览器远程访问和控制Linux Server SSH Shell任何额外的浏览器插件,如FireSSH。 – http://www.tecmint.com/shell-in-a-box-a-web-based-ssh-terminal-to-access-remote-linux-servers/

terminal仿真在客户端

AjaxTerm是由Antony Lesuisse编写的一个与Anyterm类似的程序,用Python编写。 Shell In A Box是与由Markus Gutschke编写的Anyterm类似的程序,用C编写。与Anyterm和Ajaxterm不同,它在浏览器中执行terminal仿真,而不是服务器 – http://anyterm.org/demos.html#secid2249226

蝴蝶也是一个Web服务器(用python编写),它提供了一个function齐全的客户端模拟Webterminal。