注意:我今天早上就 EC2 盒子问了这个问题,但只得到了启动和停止实例的工具的链接,所以我将重新表述...
我有几个 Linux 机器,它们每天晚上处理我的一个项目。有时,我需要进入机器,修改一些代码,配置一些东西,移动文件等等。
我用于这些操作的工具集非常稀少(通过 SSH 进入框、在 VIM 中编辑文件、WGET 我需要的远程文件),我怀疑有更好的方法可以做到这一点。我很好奇,想知道处于我这个位置的其他人在做什么。
您是否使用某种形式的窗口系统和远程桌面等同物来访问该框,还是全部都是命令行?管理远程 Windows 框很简单,因为您可以简单地远程桌面并通过网络传输文件。Linux 世界中有与此相当的东西吗?
您是否直接在机器上更改配置文件/调整脚本?或者您是否在本地机器上设置了某些东西来远程编辑这些文件?或者您只是远程编辑它们,然后在每次保存时传输它们?
您如何在服务器和本地环境之间来回移动文件?FTP?还是通过 VPN 进行某种映射驱动器?
我确实需要制定一些最佳实践来管理这些盒子。任何可以消除一些痛苦的建议都会受到热烈欢迎!
答案1
我用于这些操作的工具集非常稀少(通过 SSH 进入框、在 VIM 中编辑文件、WGET 我需要的远程文件),我怀疑有更好的方法可以做到这一点。我很好奇,想知道处于我这个位置的其他人在做什么。
稀疏?你到底是什么意思?请原谅我的咆哮,但将 ssh、vim 和 wget 视为痛苦几乎是一种侮辱。从你的问题中我推断出你白天的工作主要是程序员,所以我有点理解这个问题。但老实说,我不会雇用不熟悉你提到的这三种工具的 Linux 管理员。
您是否使用某种形式的窗口系统和远程桌面等同物来访问该框,还是全部都是命令行?管理远程 Windows 框很简单,因为您可以简单地远程桌面并通过网络传输文件。Linux 世界中有与此相当的东西吗?
对于管理员任务,我从来不使用 X 环境。你不需要它,它只会占用系统资源,而且大多数时候,它只是一种阻碍而不是帮助。大多数 GUI 配置工具(实际上,几乎所有 GUI 配置工具)仅提供你可以在 vim 的配置文件中设置的配置选项的子集。
管理 Linux 机器并不比管理 Windows 机器简单。只是需要花些时间才能掌握一套不错的技能。
还有网络文件传输等效物吗?很多。scp、sftp、ftp、nfs、cifs/smb(Windows 文件共享协议),还有其他一些。
您是否直接在机器上更改配置文件/调整脚本?或者您是否在本地机器上设置了某些东西来远程编辑这些文件?或者您只是远程编辑它们,然后在每次保存时传输它们?
取决于我做什么。大多数事情我直接在机器上的配置文件中执行(用于开发和测试机),然后我将文件推送到 Satellite 服务器上的配置通道,之后我将文件直接部署到所有服务器(用于生产机)。真的,vim 是一个宝藏。也就是说,当你找到如何正确使用它的时候。
您如何在服务器和本地环境之间来回移动文件?FTP?还是通过 VPN 进行某种映射驱动器?
一直使用 scp,也许使用一些 sftp,我建议你也这样做。永远不要使用 FTP 通过公共网络移动敏感文件(例如配置文件)。我不使用映射网络,因为同样,我需要的只是在服务器上。如果你指的是 c 文件而不是配置文件,我通常使用 svn 或 git 之类的东西,然后将我的更改推送到框中。
我确实需要制定一些最佳实践来管理这些盒子。任何可以消除一些痛苦的建议都会受到热烈欢迎!
您已经在使用它们了:ssh、scp、wget 和 vim。这些并不麻烦。在您弄清楚它们有多强大时,可能会有一些初期的烦恼。但是,回到 Windows 类比,当我不得不使用 Windows 机器时,我感到非常受阻。对您来说,情况正好相反。这只是您习惯的。所以,给它一些时间,它会来到你身边。
答案2
您已经提到了 ssh、vim 和 wget,它们是必不可少的,也是完美的。以下一些额外的工具可以使生活更轻松:
1. GNU Screen/byobu
“GNU Screen 是一款免费的终端多路复用器,允许用户在单个终端窗口或远程终端会话内访问多个单独的终端会话。它对于从命令行处理多个程序以及将程序与启动程序的 shell 分离非常有用。”(摘自维基百科上的 GNU_Screen 页面)
一个主要优点是,当您回来时(即通过 ssh 重新登录),您可以拥有一个或多个虚拟终端,它们处于与您离开时完全相同的状态。当您的连接由于某种原因中断时,这也很有用。
Screen 独立于您用来连接盒子的软件(它位于服务器上)工作,因此它可以与 putty 或大多数其他终端软件很好地结合。
本文展示了你可以用它做的一些有趣的事情: http://www.pastacode.de/extending-gnu-screen-adding-a-taskbar/en/
一个很好的替代方案是 byobu,它在某些发行版上有很好的预配置:http://byobu.co/
2.午夜指挥官
基于控制台的图形浏览工具,用于查看和操作文件和目录。
还可以进行安全的远程传输。内置有 FISH 和 FTP 客户端。
这意味着您在命令行控制台中并排有 2 个文本窗口,一个显示您的远程框,另一个显示您将其连接到的位置(也可以是您的本地系统)。然后,您可以并排浏览两个文件系统并标记或调查单个文件或文件树,也可以在位置之间复制或移动它们。FISH 是安全的,FTP 不是。对于初学者来说非常强大且简单。
3. rsync
实现不同地点之间快速、安全、可靠的文件传输和同步
4. 版本控制系统
使用分布式版本控制系统(如 bazaar、mercurial 或 git)来更新代码。Github 或 Bitbucket 提供商业代码托管,但这不是必需的,您也可以在自己的机器上有效地使用它。
Joseph Kern:你能详细说明如何使用 git 进行远程配置组织吗?
5. 终端客户端
在类 unix 系统上它们已经存在,在 Windows 上您可以使用 Putty、Tera Term、Mind Term 或 Pandora。或者安装 cygwin 并从 cygwin 终端窗口 ssh 到远程框(这有更多优势,但这取决于您喜欢哪种方式)。
6.隧道和端口转发
将某些端口安全地转发到本地计算机会很有帮助。例如,您可以转发 mysql 端口 TCP 3306 或 postgres TCP 5432 并在本地安装一些数据库管理工具。
您可以使用 putty(或基于命令行的 plink)从 Windwos 机器构建隧道,使用 cygwin 和 Mindterm 也可以进行端口转发。如果您本地在类 unix 机器上,则可以使用 ssh odr plink 创建此类隧道。
为了为各种端口创建更稳定、更持久的隧道,我推荐使用 OpenVPN。点对点的“预共享密钥”隧道方法安装起来并不难。
7. 拥有本地类unix系统
如果您的本地计算机是 Mac,则您已经拥有此功能,您可以打开本地 shell。如果您的工作站是基于 Windows 的,则创建一个本地类 Unix 服务器可能会有所帮助,该服务器位于同一个本地网络中。这可以是连接到同一路由器或交换机的不同房间中的不同机器。或者,如果您只想要一台机器,您可以安装免费的 vmware 服务器并创建虚拟机,最好使用与您的远程机器相同的操作系统。在其上安装 samba 服务器,您就可以从桌面“网络使用”samba 共享。
如果您在本地服务器上有 ssh 服务器并在路由器上为其打开端口 22,那么当您在外面时您就可以通过 ssh 进入本地系统。
您可以使用 rsync 建立到远程机器的隧道或传输和同步文件和整个文件树。您可以将其用于测试、VSC、本地开发、作为本地 Web 服务器或用于培训目的。
您可以从远程机器提取备份。您可以创建本地 cron 作业来自动执行备份(例如,您想要定期在本地保存的数据库)
8. X 远程 GUI
如果您在物理上是在类似 Linux 的系统上工作,那么也可以在 Linux 服务器上运行 GUI 应用程序,在本地机器上绘制 GUI。这可以是图形文件比较工具或几乎任何您想要的东西。
尽管使用 GUI 软件进行 Linux 机器管理并不常见且大多数情况下没有必要,但如果可以的话,在某些情况下您可能会发现它很有用。
在远程机器上,确保 /etc/ssh/sshd_config 中存在此行:
X11Forwarding Yes
使用以下命令重启 ssh 服务器
/etc/init.d/sshd restart
然后下次您登录时
ssh -X me@remote-box
您将拥有一个 X 隧道,尝试在远程服务器上安装 xclock 以进行测试,并xclock
在我刚才提到的 ssh 会话中执行。您的 Linux GUI 上应该会出现一个简单的 xclock 以进行测试。
如果您安装了本地 X 环境,那么在 Mac 上也是可以实现的。
9. 如果你有一堆类似的框或任务:使用系统配置工具
如果您有一个服务器场或进行包含许多冗余或其他相同或相似的机器的大型云部署,那么您可以使用它。
如果大多数盒子都是单独的或者运行不同的操作系统或不同的版本,那么这可能没有任何意义。
有几种工具:
chef
http://www.getchef.com/chef/请参阅下面 Evan Anderson 的精彩回答:https://serverfault.com/a/28789/45819puppet
另一个大玩家http://puppetlabs.com/salt
看起来很有希望http://www.saltstack.com/
10. 使用以下方式部署应用程序容器docker
这更进一步。Docker 是一个开源项目,可以自动在软件容器内部署应用程序:https://www.docker.io
11. 使用 Google Compute Engine 进行自动部署管理
https://cloud.google.com/products/compute-engine/
Google 为 Linux VM 提供了非常令人兴奋的可能性。您可以使用 RESTful API、命令行界面和基于 Web 的控制台等工具快速部署大型虚拟机集群。您还可以使用 RightScale 和 Scalr 等工具来自动管理您的部署。
答案3
如果你正在寻找一个好的 GUI 来通过 Windows 机器上的 SSH 进行文件管理,请查看 WinSCP:http://winscp.net
我不管理任何 EC2 实例,但一般来说,如果我有多台机器执行一个角色,我会尝试编写一个脚本来对所有类似的机器执行工作,而不是逐个进行更改。
我想开始使用 Puppet (http://reductivelabs.com/products/puppet/),因为它使系统管理更像是配置管理练习。我还没有空闲时间去详细研究它,但我听说它非常好。
答案4
ssh、vim 和 wget 有什么问题?我认为,大多数 Windows 用户都不知道这些宝藏。:-)
有时我通过 FTP 或 SFTP 远程使用 gVim。
如果您更喜欢在 Linux 机器上使用 GUI,您可以在本地主机上运行 X 服务器(例如 Cygwin),然后通过 ssh 连接转发回您的显示。
我从来没有考虑过 VPN 解决方案值得花费这么多钱或费这么大的劲去管理 Linux。
如果您正在进行开发并且需要在服务器上运行您的开发作业,只需在服务器上设置一个修订控制客户端,远程登录,同步客户端并运行您的流程。