Repository files navigation

#Shunt

Teaser

Build StatusDependencies StatusCoverage StatusLatest Stable VersionTotal Downloads

Inspired by Ruby's Capistrano, Shunt is PHP library for executing commands on multiple remote machines, via SSH. Specifically, this library was written to simplify and automate deployment of PHP applications to distributed environments.

Install

Via Composer

{
"require": {
"league/shunt": "~2.0"
}
}

Requirement

  • PHP >= 5.3.3
  • libssh2
  • ssh2.so

Additional Features

  • Secure copy (SCP) support
  • Secure FTP (SFTP) support

Assumptions

Shunt has very firm ideas about how things ought to be done, and tries to force those ideas on you. Some of the assumptions behind these opinions are:

  • You are using SSH to access the remote servers.
  • You either have the same password to all target machines, or you have public keys in place to allow passwordless access to them.

Do not expect these assumptions to change.

Usage

In general, you'll use Shunt as follows:

  • Create a recipe file (Shuntfile).
  • Use the shunt script to execute your recipe.

From the root folder of your composer-based project, use the Shunt script as follows:

vendor/bin/shunt some_task some_host,other_host

By default, the script will look for a file called Shuntfile, which contain hosts information, credential and your tasks. Here the structure of Shuntfile :

<?php
return array(
'hosts' => array(
'staging' => 'staging.domain.com',
'repro' => 'backup.domain.com',
'production' => 'production.domain.com',
),
'auth' => array(
'username' => 'shunt',
'password' => 'hearmyroar',
'pubkeyfile' => NULL,
'privkeyfile' => NULL,
'passphrase' => NULL,
),
'tasks' => array(
'read_home_dir' => function($s) {
$s->run('ls');
},
'print_php_info' => function($s) {
$s->run('php -i');
},
'upload_foo_source' => function($s) {
$s->sftp()->mkdir('source');
$s->scp()->put('foo', 'source/foo');
}
),
);

The tasks collection indicates which tasks that available to execute. You can execute list command to see all the available tasks and available hosts. Based by above recipes, you could run :

vendor/bin/shunt read_home_dir .

Above command will execute ls on all remote machines defined in hosts parameter. You could tell Shunt to run the task on specific host(s) by appending the host nickname right after the task :

vendor/bin/shunt read_home_dir staging
vendor/bin/shunt print_php_info staging,production

As you may already notice, you could easily access SCP and SFTP instance by calling scp() or sftp() method within your task. Bellow table shows available APIs for both SCP and SFTP instances :

TypeMethod SignatureDescription
SCPput($localFile = '', $remoteFile = '')Send a file from local to remote path
SCPget($remoteFile = '', $localFile = '')Get a file from remote to local path
SFTPchmod($filename = '', $mode = 0644)Attempts to change the mode of the specified file to that given in mode.
SFTPlstat($path = '')Stats a symbolic link on the remote filesystem without following the link.
SFTPstat($path = '')Stats a file on the remote filesystem following any symbolic links.
SFTPmkdir($dirname = '', $mode = 0777, $recursive = false)Creates a directory on the remote file server with permissions set to mode.
SFTPrmdir($dirname = '')Removes a directory from the remote file server.
SFTPsymlink($target = '',$link = '')Creates a symbolic link named link on the remote filesystem pointing to target.
SFTPreadlink($link = '')Returns the target of a symbolic link.
SFTPrealpath($filename = '')Translates filename into the effective real path on the remote filesystem.
SFTPrename($from = '', $to = '')Renames a file on the remote filesystem.
SFTPunlink($filename = '')Deletes a file on the remote filesystem.

Changelog

See the changelog file

Contributing

Please see CONTRIBUTING for details.

Support

Bugs and feature request are tracked on GitHub

License

Shunt is released under the MIT License. See the bundled LICENSE file for details.

About

[ABANDONED] PHP library for executing commands on multiple remote machines, via SSH

Resources

Contributing

Stars

434 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

#Shunt

Teaser

Build StatusDependencies StatusCoverage StatusLatest Stable VersionTotal Downloads

Inspired by Ruby's Capistrano, Shunt is PHP library for executing commands on multiple remote machines, via SSH. Specifically, this library was written to simplify and automate deployment of PHP applications to distributed environments.

Install

Via Composer

{
"require": {
"league/shunt": "~2.0"
}
}

Requirement

  • PHP >= 5.3.3
  • libssh2
  • ssh2.so

Additional Features

  • Secure copy (SCP) support
  • Secure FTP (SFTP) support

Assumptions

Shunt has very firm ideas about how things ought to be done, and tries to force those ideas on you. Some of the assumptions behind these opinions are:

  • You are using SSH to access the remote servers.
  • You either have the same password to all target machines, or you have public keys in place to allow passwordless access to them.

Do not expect these assumptions to change.

Usage

In general, you'll use Shunt as follows:

  • Create a recipe file (Shuntfile).
  • Use the shunt script to execute your recipe.

From the root folder of your composer-based project, use the Shunt script as follows:

vendor/bin/shunt some_task some_host,other_host

By default, the script will look for a file called Shuntfile, which contain hosts information, credential and your tasks. Here the structure of Shuntfile :

<?php
return array(
'hosts' => array(
'staging' => 'staging.domain.com',
'repro' => 'backup.domain.com',
'production' => 'production.domain.com',
),
'auth' => array(
'username' => 'shunt',
'password' => 'hearmyroar',
'pubkeyfile' => NULL,
'privkeyfile' => NULL,
'passphrase' => NULL,
),
'tasks' => array(
'read_home_dir' => function($s) {
$s->run('ls');
},
'print_php_info' => function($s) {
$s->run('php -i');
},
'upload_foo_source' => function($s) {
$s->sftp()->mkdir('source');
$s->scp()->put('foo', 'source/foo');
}
),
);

The tasks collection indicates which tasks that available to execute. You can execute list command to see all the available tasks and available hosts. Based by above recipes, you could run :

vendor/bin/shunt read_home_dir .

Above command will execute ls on all remote machines defined in hosts parameter. You could tell Shunt to run the task on specific host(s) by appending the host nickname right after the task :

vendor/bin/shunt read_home_dir staging
vendor/bin/shunt print_php_info staging,production

As you may already notice, you could easily access SCP and SFTP instance by calling scp() or sftp() method within your task. Bellow table shows available APIs for both SCP and SFTP instances :

TypeMethod SignatureDescription
SCPput($localFile = '', $remoteFile = '')Send a file from local to remote path
SCPget($remoteFile = '', $localFile = '')Get a file from remote to local path
SFTPchmod($filename = '', $mode = 0644)Attempts to change the mode of the specified file to that given in mode.
SFTPlstat($path = '')Stats a symbolic link on the remote filesystem without following the link.
SFTPstat($path = '')Stats a file on the remote filesystem following any symbolic links.
SFTPmkdir($dirname = '', $mode = 0777, $recursive = false)Creates a directory on the remote file server with permissions set to mode.
SFTPrmdir($dirname = '')Removes a directory from the remote file server.
SFTPsymlink($target = '',$link = '')Creates a symbolic link named link on the remote filesystem pointing to target.
SFTPreadlink($link = '')Returns the target of a symbolic link.
SFTPrealpath($filename = '')Translates filename into the effective real path on the remote filesystem.
SFTPrename($from = '', $to = '')Renames a file on the remote filesystem.
SFTPunlink($filename = '')Deletes a file on the remote filesystem.

Changelog

See the changelog file

Contributing

Please see CONTRIBUTING for details.

Support

Bugs and feature request are tracked on GitHub

License

Shunt is released under the MIT License. See the bundled LICENSE file for details.

About

[ABANDONED] PHP library for executing commands on multiple remote machines, via SSH

Resources

Contributing

Stars

434 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

#Shunt

Teaser

Build StatusDependencies StatusCoverage StatusLatest Stable VersionTotal Downloads

Inspired by Ruby's Capistrano, Shunt is PHP library for executing commands on multiple remote machines, via SSH. Specifically, this library was written to simplify and automate deployment of PHP applications to distributed environments.

Install

Via Composer

{
"require": {
"league/shunt": "~2.0"
}
}

Requirement

  • PHP >= 5.3.3
  • libssh2
  • ssh2.so

Additional Features

  • Secure copy (SCP) support
  • Secure FTP (SFTP) support

Assumptions

Shunt has very firm ideas about how things ought to be done, and tries to force those ideas on you. Some of the assumptions behind these opinions are:

  • You are using SSH to access the remote servers.
  • You either have the same password to all target machines, or you have public keys in place to allow passwordless access to them.

Do not expect these assumptions to change.

Usage

In general, you'll use Shunt as follows:

  • Create a recipe file (Shuntfile).
  • Use the shunt script to execute your recipe.

From the root folder of your composer-based project, use the Shunt script as follows:

vendor/bin/shunt some_task some_host,other_host

By default, the script will look for a file called Shuntfile, which contain hosts information, credential and your tasks. Here the structure of Shuntfile :

<?php
return array(
'hosts' => array(
'staging' => 'staging.domain.com',
'repro' => 'backup.domain.com',
'production' => 'production.domain.com',
),
'auth' => array(
'username' => 'shunt',
'password' => 'hearmyroar',
'pubkeyfile' => NULL,
'privkeyfile' => NULL,
'passphrase' => NULL,
),
'tasks' => array(
'read_home_dir' => function($s) {
$s->run('ls');
},
'print_php_info' => function($s) {
$s->run('php -i');
},
'upload_foo_source' => function($s) {
$s->sftp()->mkdir('source');
$s->scp()->put('foo', 'source/foo');
}
),
);

The tasks collection indicates which tasks that available to execute. You can execute list command to see all the available tasks and available hosts. Based by above recipes, you could run :

vendor/bin/shunt read_home_dir .

Above command will execute ls on all remote machines defined in hosts parameter. You could tell Shunt to run the task on specific host(s) by appending the host nickname right after the task :

vendor/bin/shunt read_home_dir staging
vendor/bin/shunt print_php_info staging,production

As you may already notice, you could easily access SCP and SFTP instance by calling scp() or sftp() method within your task. Bellow table shows available APIs for both SCP and SFTP instances :

TypeMethod SignatureDescription
SCPput($localFile = '', $remoteFile = '')Send a file from local to remote path
SCPget($remoteFile = '', $localFile = '')Get a file from remote to local path
SFTPchmod($filename = '', $mode = 0644)Attempts to change the mode of the specified file to that given in mode.
SFTPlstat($path = '')Stats a symbolic link on the remote filesystem without following the link.
SFTPstat($path = '')Stats a file on the remote filesystem following any symbolic links.
SFTPmkdir($dirname = '', $mode = 0777, $recursive = false)Creates a directory on the remote file server with permissions set to mode.
SFTPrmdir($dirname = '')Removes a directory from the remote file server.
SFTPsymlink($target = '',$link = '')Creates a symbolic link named link on the remote filesystem pointing to target.
SFTPreadlink($link = '')Returns the target of a symbolic link.
SFTPrealpath($filename = '')Translates filename into the effective real path on the remote filesystem.
SFTPrename($from = '', $to = '')Renames a file on the remote filesystem.
SFTPunlink($filename = '')Deletes a file on the remote filesystem.

Changelog

See the changelog file

Contributing

Please see CONTRIBUTING for details.

Support

Bugs and feature request are tracked on GitHub

License

Shunt is released under the MIT License. See the bundled LICENSE file for details.

About

[ABANDONED] PHP library for executing commands on multiple remote machines, via SSH

Resources

Contributing

Stars

434 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

#Shunt

Teaser

Build StatusDependencies StatusCoverage StatusLatest Stable VersionTotal Downloads

Inspired by Ruby's Capistrano, Shunt is PHP library for executing commands on multiple remote machines, via SSH. Specifically, this library was written to simplify and automate deployment of PHP applications to distributed environments.

Install

Via Composer

{
"require": {
"league/shunt": "~2.0"
}
}

Requirement

  • PHP >= 5.3.3
  • libssh2
  • ssh2.so

Additional Features

  • Secure copy (SCP) support
  • Secure FTP (SFTP) support

Assumptions

Shunt has very firm ideas about how things ought to be done, and tries to force those ideas on you. Some of the assumptions behind these opinions are:

  • You are using SSH to access the remote servers.
  • You either have the same password to all target machines, or you have public keys in place to allow passwordless access to them.

Do not expect these assumptions to change.

Usage

In general, you'll use Shunt as follows:

  • Create a recipe file (Shuntfile).
  • Use the shunt script to execute your recipe.

From the root folder of your composer-based project, use the Shunt script as follows:

vendor/bin/shunt some_task some_host,other_host

By default, the script will look for a file called Shuntfile, which contain hosts information, credential and your tasks. Here the structure of Shuntfile :

<?php
return array(
'hosts' => array(
'staging' => 'staging.domain.com',
'repro' => 'backup.domain.com',
'production' => 'production.domain.com',
),
'auth' => array(
'username' => 'shunt',
'password' => 'hearmyroar',
'pubkeyfile' => NULL,
'privkeyfile' => NULL,
'passphrase' => NULL,
),
'tasks' => array(
'read_home_dir' => function($s) {
$s->run('ls');
},
'print_php_info' => function($s) {
$s->run('php -i');
},
'upload_foo_source' => function($s) {
$s->sftp()->mkdir('source');
$s->scp()->put('foo', 'source/foo');
}
),
);

The tasks collection indicates which tasks that available to execute. You can execute list command to see all the available tasks and available hosts. Based by above recipes, you could run :

vendor/bin/shunt read_home_dir .

Above command will execute ls on all remote machines defined in hosts parameter. You could tell Shunt to run the task on specific host(s) by appending the host nickname right after the task :

vendor/bin/shunt read_home_dir staging
vendor/bin/shunt print_php_info staging,production

As you may already notice, you could easily access SCP and SFTP instance by calling scp() or sftp() method within your task. Bellow table shows available APIs for both SCP and SFTP instances :

TypeMethod SignatureDescription
SCPput($localFile = '', $remoteFile = '')Send a file from local to remote path
SCPget($remoteFile = '', $localFile = '')Get a file from remote to local path
SFTPchmod($filename = '', $mode = 0644)Attempts to change the mode of the specified file to that given in mode.
SFTPlstat($path = '')Stats a symbolic link on the remote filesystem without following the link.
SFTPstat($path = '')Stats a file on the remote filesystem following any symbolic links.
SFTPmkdir($dirname = '', $mode = 0777, $recursive = false)Creates a directory on the remote file server with permissions set to mode.
SFTPrmdir($dirname = '')Removes a directory from the remote file server.
SFTPsymlink($target = '',$link = '')Creates a symbolic link named link on the remote filesystem pointing to target.
SFTPreadlink($link = '')Returns the target of a symbolic link.
SFTPrealpath($filename = '')Translates filename into the effective real path on the remote filesystem.
SFTPrename($from = '', $to = '')Renames a file on the remote filesystem.
SFTPunlink($filename = '')Deletes a file on the remote filesystem.

Changelog

See the changelog file

Contributing

Please see CONTRIBUTING for details.

Support

Bugs and feature request are tracked on GitHub

License

Shunt is released under the MIT License. See the bundled LICENSE file for details.

About

[ABANDONED] PHP library for executing commands on multiple remote machines, via SSH

Resources

Contributing

Stars

434 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

#Shunt

Teaser

Build StatusDependencies StatusCoverage StatusLatest Stable VersionTotal Downloads

Inspired by Ruby's Capistrano, Shunt is PHP library for executing commands on multiple remote machines, via SSH. Specifically, this library was written to simplify and automate deployment of PHP applications to distributed environments.

Install

Via Composer

{
"require": {
"league/shunt": "~2.0"
}
}

Requirement

  • PHP >= 5.3.3
  • libssh2
  • ssh2.so

Additional Features

  • Secure copy (SCP) support
  • Secure FTP (SFTP) support

Assumptions

Shunt has very firm ideas about how things ought to be done, and tries to force those ideas on you. Some of the assumptions behind these opinions are:

  • You are using SSH to access the remote servers.
  • You either have the same password to all target machines, or you have public keys in place to allow passwordless access to them.

Do not expect these assumptions to change.

Usage

In general, you'll use Shunt as follows:

  • Create a recipe file (Shuntfile).
  • Use the shunt script to execute your recipe.

From the root folder of your composer-based project, use the Shunt script as follows:

vendor/bin/shunt some_task some_host,other_host

By default, the script will look for a file called Shuntfile, which contain hosts information, credential and your tasks. Here the structure of Shuntfile :

<?php
return array(
'hosts' => array(
'staging' => 'staging.domain.com',
'repro' => 'backup.domain.com',
'production' => 'production.domain.com',
),
'auth' => array(
'username' => 'shunt',
'password' => 'hearmyroar',
'pubkeyfile' => NULL,
'privkeyfile' => NULL,
'passphrase' => NULL,
),
'tasks' => array(
'read_home_dir' => function($s) {
$s->run('ls');
},
'print_php_info' => function($s) {
$s->run('php -i');
},
'upload_foo_source' => function($s) {
$s->sftp()->mkdir('source');
$s->scp()->put('foo', 'source/foo');
}
),
);

The tasks collection indicates which tasks that available to execute. You can execute list command to see all the available tasks and available hosts. Based by above recipes, you could run :

vendor/bin/shunt read_home_dir .

Above command will execute ls on all remote machines defined in hosts parameter. You could tell Shunt to run the task on specific host(s) by appending the host nickname right after the task :

vendor/bin/shunt read_home_dir staging
vendor/bin/shunt print_php_info staging,production

As you may already notice, you could easily access SCP and SFTP instance by calling scp() or sftp() method within your task. Bellow table shows available APIs for both SCP and SFTP instances :

TypeMethod SignatureDescription
SCPput($localFile = '', $remoteFile = '')Send a file from local to remote path
SCPget($remoteFile = '', $localFile = '')Get a file from remote to local path
SFTPchmod($filename = '', $mode = 0644)Attempts to change the mode of the specified file to that given in mode.
SFTPlstat($path = '')Stats a symbolic link on the remote filesystem without following the link.
SFTPstat($path = '')Stats a file on the remote filesystem following any symbolic links.
SFTPmkdir($dirname = '', $mode = 0777, $recursive = false)Creates a directory on the remote file server with permissions set to mode.
SFTPrmdir($dirname = '')Removes a directory from the remote file server.
SFTPsymlink($target = '',$link = '')Creates a symbolic link named link on the remote filesystem pointing to target.
SFTPreadlink($link = '')Returns the target of a symbolic link.
SFTPrealpath($filename = '')Translates filename into the effective real path on the remote filesystem.
SFTPrename($from = '', $to = '')Renames a file on the remote filesystem.
SFTPunlink($filename = '')Deletes a file on the remote filesystem.

Changelog

See the changelog file

Contributing

Please see CONTRIBUTING for details.

Support

Bugs and feature request are tracked on GitHub

License

Shunt is released under the MIT License. See the bundled LICENSE file for details.

About

[ABANDONED] PHP library for executing commands on multiple remote machines, via SSH

Resources

Contributing

Stars

434 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

#Shunt

Teaser

Build StatusDependencies StatusCoverage StatusLatest Stable VersionTotal Downloads

Inspired by Ruby's Capistrano, Shunt is PHP library for executing commands on multiple remote machines, via SSH. Specifically, this library was written to simplify and automate deployment of PHP applications to distributed environments.

Install

Via Composer

{
"require": {
"league/shunt": "~2.0"
}
}

Requirement

  • PHP >= 5.3.3
  • libssh2
  • ssh2.so

Additional Features

  • Secure copy (SCP) support
  • Secure FTP (SFTP) support

Assumptions

Shunt has very firm ideas about how things ought to be done, and tries to force those ideas on you. Some of the assumptions behind these opinions are:

  • You are using SSH to access the remote servers.
  • You either have the same password to all target machines, or you have public keys in place to allow passwordless access to them.

Do not expect these assumptions to change.

Usage

In general, you'll use Shunt as follows:

  • Create a recipe file (Shuntfile).
  • Use the shunt script to execute your recipe.

From the root folder of your composer-based project, use the Shunt script as follows:

vendor/bin/shunt some_task some_host,other_host

By default, the script will look for a file called Shuntfile, which contain hosts information, credential and your tasks. Here the structure of Shuntfile :

<?php
return array(
'hosts' => array(
'staging' => 'staging.domain.com',
'repro' => 'backup.domain.com',
'production' => 'production.domain.com',
),
'auth' => array(
'username' => 'shunt',
'password' => 'hearmyroar',
'pubkeyfile' => NULL,
'privkeyfile' => NULL,
'passphrase' => NULL,
),
'tasks' => array(
'read_home_dir' => function($s) {
$s->run('ls');
},
'print_php_info' => function($s) {
$s->run('php -i');
},
'upload_foo_source' => function($s) {
$s->sftp()->mkdir('source');
$s->scp()->put('foo', 'source/foo');
}
),
);

The tasks collection indicates which tasks that available to execute. You can execute list command to see all the available tasks and available hosts. Based by above recipes, you could run :

vendor/bin/shunt read_home_dir .

Above command will execute ls on all remote machines defined in hosts parameter. You could tell Shunt to run the task on specific host(s) by appending the host nickname right after the task :

vendor/bin/shunt read_home_dir staging
vendor/bin/shunt print_php_info staging,production

As you may already notice, you could easily access SCP and SFTP instance by calling scp() or sftp() method within your task. Bellow table shows available APIs for both SCP and SFTP instances :

TypeMethod SignatureDescription
SCPput($localFile = '', $remoteFile = '')Send a file from local to remote path
SCPget($remoteFile = '', $localFile = '')Get a file from remote to local path
SFTPchmod($filename = '', $mode = 0644)Attempts to change the mode of the specified file to that given in mode.
SFTPlstat($path = '')Stats a symbolic link on the remote filesystem without following the link.
SFTPstat($path = '')Stats a file on the remote filesystem following any symbolic links.
SFTPmkdir($dirname = '', $mode = 0777, $recursive = false)Creates a directory on the remote file server with permissions set to mode.
SFTPrmdir($dirname = '')Removes a directory from the remote file server.
SFTPsymlink($target = '',$link = '')Creates a symbolic link named link on the remote filesystem pointing to target.
SFTPreadlink($link = '')Returns the target of a symbolic link.
SFTPrealpath($filename = '')Translates filename into the effective real path on the remote filesystem.
SFTPrename($from = '', $to = '')Renames a file on the remote filesystem.
SFTPunlink($filename = '')Deletes a file on the remote filesystem.

Changelog

See the changelog file

Contributing

Please see CONTRIBUTING for details.

Support

Bugs and feature request are tracked on GitHub

License

Shunt is released under the MIT License. See the bundled LICENSE file for details.

About

[ABANDONED] PHP library for executing commands on multiple remote machines, via SSH

Resources

Contributing

Stars

434 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

#Shunt

Teaser

Build StatusDependencies StatusCoverage StatusLatest Stable VersionTotal Downloads

Inspired by Ruby's Capistrano, Shunt is PHP library for executing commands on multiple remote machines, via SSH. Specifically, this library was written to simplify and automate deployment of PHP applications to distributed environments.

Install

Via Composer

{
"require": {
"league/shunt": "~2.0"
}
}

Requirement

  • PHP >= 5.3.3
  • libssh2
  • ssh2.so

Additional Features

  • Secure copy (SCP) support
  • Secure FTP (SFTP) support

Assumptions

Shunt has very firm ideas about how things ought to be done, and tries to force those ideas on you. Some of the assumptions behind these opinions are:

  • You are using SSH to access the remote servers.
  • You either have the same password to all target machines, or you have public keys in place to allow passwordless access to them.

Do not expect these assumptions to change.

Usage

In general, you'll use Shunt as follows:

  • Create a recipe file (Shuntfile).
  • Use the shunt script to execute your recipe.

From the root folder of your composer-based project, use the Shunt script as follows:

vendor/bin/shunt some_task some_host,other_host

By default, the script will look for a file called Shuntfile, which contain hosts information, credential and your tasks. Here the structure of Shuntfile :

<?php
return array(
'hosts' => array(
'staging' => 'staging.domain.com',
'repro' => 'backup.domain.com',
'production' => 'production.domain.com',
),
'auth' => array(
'username' => 'shunt',
'password' => 'hearmyroar',
'pubkeyfile' => NULL,
'privkeyfile' => NULL,
'passphrase' => NULL,
),
'tasks' => array(
'read_home_dir' => function($s) {
$s->run('ls');
},
'print_php_info' => function($s) {
$s->run('php -i');
},
'upload_foo_source' => function($s) {
$s->sftp()->mkdir('source');
$s->scp()->put('foo', 'source/foo');
}
),
);

The tasks collection indicates which tasks that available to execute. You can execute list command to see all the available tasks and available hosts. Based by above recipes, you could run :

vendor/bin/shunt read_home_dir .

Above command will execute ls on all remote machines defined in hosts parameter. You could tell Shunt to run the task on specific host(s) by appending the host nickname right after the task :

vendor/bin/shunt read_home_dir staging
vendor/bin/shunt print_php_info staging,production

As you may already notice, you could easily access SCP and SFTP instance by calling scp() or sftp() method within your task. Bellow table shows available APIs for both SCP and SFTP instances :

TypeMethod SignatureDescription
SCPput($localFile = '', $remoteFile = '')Send a file from local to remote path
SCPget($remoteFile = '', $localFile = '')Get a file from remote to local path
SFTPchmod($filename = '', $mode = 0644)Attempts to change the mode of the specified file to that given in mode.
SFTPlstat($path = '')Stats a symbolic link on the remote filesystem without following the link.
SFTPstat($path = '')Stats a file on the remote filesystem following any symbolic links.
SFTPmkdir($dirname = '', $mode = 0777, $recursive = false)Creates a directory on the remote file server with permissions set to mode.
SFTPrmdir($dirname = '')Removes a directory from the remote file server.
SFTPsymlink($target = '',$link = '')Creates a symbolic link named link on the remote filesystem pointing to target.
SFTPreadlink($link = '')Returns the target of a symbolic link.
SFTPrealpath($filename = '')Translates filename into the effective real path on the remote filesystem.
SFTPrename($from = '', $to = '')Renames a file on the remote filesystem.
SFTPunlink($filename = '')Deletes a file on the remote filesystem.

Changelog

See the changelog file

Contributing

Please see CONTRIBUTING for details.

Support

Bugs and feature request are tracked on GitHub

License

Shunt is released under the MIT License. See the bundled LICENSE file for details.

About

[ABANDONED] PHP library for executing commands on multiple remote machines, via SSH

Resources

Contributing

Stars

434 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

#Shunt

Teaser

Build StatusDependencies StatusCoverage StatusLatest Stable VersionTotal Downloads

Inspired by Ruby's Capistrano, Shunt is PHP library for executing commands on multiple remote machines, via SSH. Specifically, this library was written to simplify and automate deployment of PHP applications to distributed environments.

Install

Via Composer

{
"require": {
"league/shunt": "~2.0"
}
}

Requirement

  • PHP >= 5.3.3
  • libssh2
  • ssh2.so

Additional Features

  • Secure copy (SCP) support
  • Secure FTP (SFTP) support

Assumptions

Shunt has very firm ideas about how things ought to be done, and tries to force those ideas on you. Some of the assumptions behind these opinions are:

  • You are using SSH to access the remote servers.
  • You either have the same password to all target machines, or you have public keys in place to allow passwordless access to them.

Do not expect these assumptions to change.

Usage

In general, you'll use Shunt as follows:

  • Create a recipe file (Shuntfile).
  • Use the shunt script to execute your recipe.

From the root folder of your composer-based project, use the Shunt script as follows:

vendor/bin/shunt some_task some_host,other_host

By default, the script will look for a file called Shuntfile, which contain hosts information, credential and your tasks. Here the structure of Shuntfile :

<?php
return array(
'hosts' => array(
'staging' => 'staging.domain.com',
'repro' => 'backup.domain.com',
'production' => 'production.domain.com',
),
'auth' => array(
'username' => 'shunt',
'password' => 'hearmyroar',
'pubkeyfile' => NULL,
'privkeyfile' => NULL,
'passphrase' => NULL,
),
'tasks' => array(
'read_home_dir' => function($s) {
$s->run('ls');
},
'print_php_info' => function($s) {
$s->run('php -i');
},
'upload_foo_source' => function($s) {
$s->sftp()->mkdir('source');
$s->scp()->put('foo', 'source/foo');
}
),
);

The tasks collection indicates which tasks that available to execute. You can execute list command to see all the available tasks and available hosts. Based by above recipes, you could run :

vendor/bin/shunt read_home_dir .

Above command will execute ls on all remote machines defined in hosts parameter. You could tell Shunt to run the task on specific host(s) by appending the host nickname right after the task :

vendor/bin/shunt read_home_dir staging
vendor/bin/shunt print_php_info staging,production

As you may already notice, you could easily access SCP and SFTP instance by calling scp() or sftp() method within your task. Bellow table shows available APIs for both SCP and SFTP instances :

TypeMethod SignatureDescription
SCPput($localFile = '', $remoteFile = '')Send a file from local to remote path
SCPget($remoteFile = '', $localFile = '')Get a file from remote to local path
SFTPchmod($filename = '', $mode = 0644)Attempts to change the mode of the specified file to that given in mode.
SFTPlstat($path = '')Stats a symbolic link on the remote filesystem without following the link.
SFTPstat($path = '')Stats a file on the remote filesystem following any symbolic links.
SFTPmkdir($dirname = '', $mode = 0777, $recursive = false)Creates a directory on the remote file server with permissions set to mode.
SFTPrmdir($dirname = '')Removes a directory from the remote file server.
SFTPsymlink($target = '',$link = '')Creates a symbolic link named link on the remote filesystem pointing to target.
SFTPreadlink($link = '')Returns the target of a symbolic link.
SFTPrealpath($filename = '')Translates filename into the effective real path on the remote filesystem.
SFTPrename($from = '', $to = '')Renames a file on the remote filesystem.
SFTPunlink($filename = '')Deletes a file on the remote filesystem.

Changelog

See the changelog file

Contributing

Please see CONTRIBUTING for details.

Support

Bugs and feature request are tracked on GitHub

License

Shunt is released under the MIT License. See the bundled LICENSE file for details.

About

[ABANDONED] PHP library for executing commands on multiple remote machines, via SSH

Resources

Contributing

Stars

434 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages